module Main where import Eval (eval) import Language import Show (showExpr) import Simplify (simplify) main :: IO () main = do print . eval $ let_ (add (con (2 :: Int)) (con 3)) $ \_ x -> mul x x let prog = let_ (add (con (2 :: Int)) (con 3)) $ \_ x -> let_ (mul (con (4 :: Int)) (con 5)) $ \wy y -> let_ (pair (wy x) y) $ \wt t -> add (mul (wt (wy x)) (snd_ t)) (mul (wt y) (fst_ t)) putStrLn (showExpr prog) putStrLn (showExpr (simplify prog)) print (eval prog)