summaryrefslogtreecommitdiff
path: root/lec05/Calc.hs
blob: f97d78486ec6ffa8f656dc119d5aab59fa806938 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
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