Newer
Older
module Expr where
data Expr = Var String
| Num Double
| Plus Expr Expr
| Minus Expr Expr
| Times Expr Expr
| Div Expr Expr
deriving (Eq, Show)
evalM :: Monad m=> (String-> m a) -> (a-> a-> m a)-> Expr-> m a
evalM f p (Var i) = f i
evalM f p (Plus a b) = do x<- evalM f p a; y <- evalM f p b; p x y