Advertisement
Guest User

Untitled

a guest
May 25th, 2015
239
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.64 KB | None | 0 0
  1. {-# LANGUAGE GADTs #-}
  2.  
  3. module Gadt where
  4.  
  5. import Data.Monoid
  6.  
  7. data Expr a where
  8. EI :: Int -> Expr Int
  9. EB :: Bool -> Expr Bool
  10. Plus :: Expr Int -> Expr Int -> Expr Int
  11. If :: Expr Bool -> Expr a -> Expr a -> Expr a
  12.  
  13. data Val a where
  14. VI :: Int -> Val Int
  15. VB :: Bool -> Val Bool
  16.  
  17. instance Show (Val a) where
  18. show (VI i) = "VI " ++ show i
  19. show (VB b) = "VB " ++ show b
  20.  
  21. example = If (EB True) (EI 1) (EI 2)
  22.  
  23. eval :: Expr a -> Val a
  24. eval (EI i) = VI i
  25. eval (EB b) = VB b
  26. eval (Plus l r) =
  27. let (VI i) = eval l
  28. (VI j) = eval r
  29. in VI (i + j)
  30. eval (If p t e) =
  31. let (VB b) = eval p
  32. in if b then eval t else eval e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement