9 import Control.Applicative
13 ([(String, Int)] -> Either String Int //Evaluator
17 lit i = (const $ pure i, toString i)
21 ( maybe (Left $ "Undefined variable " +++ s) Right o lookup s
25 (+.) infixl 6 :: Expr Expr -> Expr
26 (+.) (ea, pa) (eb, pb) =
27 ( \s->liftM2 (+) (ea s) (eb s)
31 print :: Expr -> String
34 eval :: Expr [(String, Int)]-> Either String Int
37 Start = eval (lit 5 +. lit 37) []