change citations to citep
[phd-thesis.git] / appendix / lst / expr_gadt.hs
1 module ExprGADT where
2 import Prelude hiding (print)
3
4 data Expr a where
5 Lit :: Show a => a -> Expr a
6 Add :: Num a => Expr a -> Expr a -> Expr a
7 Eq :: Eq e => Expr e -> Expr e -> Expr Bool
8
9 eval :: Expr a -> a
10 eval (Lit e) = e
11 eval (Add l r) = eval l + eval r
12 eval (Eq l r) = eval l == eval r
13
14 print :: Expr a -> String
15 print (Lit e) = show e
16 print (Add l r) = print l ++ "+" ++ print r
17 print (Eq l r) = print l ++ "==" ++ print r