Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- module Phantom (
- ei, eb, plus, iff, -- Smart constructors
- eval -- Evaluation
- ) where
- data Expr a = EI Int
- | EB Bool
- | Plus (Expr Int) (Expr Int)
- | If (Expr Bool) (Expr a) (Expr a)
- deriving Show
- ei :: Int -> Expr Int
- ei i = EI i
- eb :: Bool -> Expr Bool
- eb b = EB b
- plus :: Expr Int -> Expr Int -> Expr Int
- plus l r = Plus l r
- iff :: Expr Bool -> Expr a -> Expr a -> Expr a
- iff p t e = If p t e
- data Val = VI Int
- | VB Bool
- deriving Show
- example = iff (eb True) (ei 1) (ei 2)
- eval :: Expr a -> Val
- eval (EI i) = VI i
- eval (EB b) = VB b
- eval (Plus l r) =
- let (VI i) = eval l
- (VI j) = eval r
- in VI (i + j)
- eval (If p t e) =
- let (VB b) = eval p
- in if b then eval t else eval e
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement