import Parser import Repl data Expr = ENum Integer | EPlus Expr Expr | ETimes Expr Expr deriving Show eval :: Expr -> Integer eval (ENum n) = n eval (EPlus e1 e2) = eval e1 + eval e2 eval (ETimes e1 e2) = eval e1 * eval e2 desugar :: PExpr -> Expr desugar (PNum n) = ENum n desugar (PPlus e1 e2) = EPlus (desugar e1) (desugar e2) desugar (PMinus e1 e2) = EPlus (desugar e1) (ETimes (ENum (-1)) (desugar e2)) desugar (PTimes e1 e2) = ETimes (desugar e1) (desugar e2) desugar _ = error "unsupported syntactic construct" run str = ("", show (eval (desugar (parse str)))) main :: IO () main = repl run Nothing