module Calc where import ExprT import Parser -- Exercise 1 eval :: ExprT -> Integer eval (Lit n) = n eval (Add l r) = eval l + eval r eval (Mul l r) = eval l * eval r -- Exercise 2 evalStr :: String -> Maybe Integer evalStr s = case parseExp Lit Add Mul s of Nothing -> Nothing Just t -> Just (eval t) -- Exercise 3 class Expr a where lit :: Integer -> a add :: a -> a -> a mul :: a -> a -> a instance Expr ExprT where lit = Lit add = Add mul = Mul reify :: ExprT -> ExprT reify = id