Advertisement
Guest User

Untitled

a guest
May 25th, 2015
233
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.76 KB | None | 0 0
  1. module Phantom (
  2. ei, eb, plus, iff, -- Smart constructors
  3. eval -- Evaluation
  4. ) where
  5.  
  6. data Expr a = EI Int
  7. | EB Bool
  8. | Plus (Expr Int) (Expr Int)
  9. | If (Expr Bool) (Expr a) (Expr a)
  10. deriving Show
  11.  
  12. ei :: Int -> Expr Int
  13. ei i = EI i
  14.  
  15. eb :: Bool -> Expr Bool
  16. eb b = EB b
  17.  
  18. plus :: Expr Int -> Expr Int -> Expr Int
  19. plus l r = Plus l r
  20.  
  21. iff :: Expr Bool -> Expr a -> Expr a -> Expr a
  22. iff p t e = If p t e
  23.  
  24. data Val = VI Int
  25. | VB Bool
  26. deriving Show
  27.  
  28. example = iff (eb True) (ei 1) (ei 2)
  29.  
  30. eval :: Expr a -> Val
  31. eval (EI i) = VI i
  32. eval (EB b) = VB b
  33. eval (Plus l r) =
  34. let (VI i) = eval l
  35. (VI j) = eval r
  36. in VI (i + j)
  37. eval (If p t e) =
  38. let (VB b) = eval p
  39. in if b then eval t else eval e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement