{-# LANGUAGE GADTs #-} module Problem4 where -- a) data Expr t where Lit :: Int -> Expr Int Plus :: Expr (Int -> Int -> Int) App :: Expr (a -> b) -> Expr a -> Expr b -- b) eval :: Expr t -> t eval (Lit n) = n eval Plus = (+) eval (App e1 e2) = (eval e1) (eval e2)