-- | Smart constructor that simplifies constants.
plus :: Exp -> Exp -> Exp
plus (Lit (LitInt n)) (Lit (LitInt m)) = litIntE (n + m)
plus :: Exp -> Exp -> Exp
plus (Lit (LitInt n)) (Lit (LitInt m)) = litIntE (n + m)
plus (Lit (LitInt n)) (Lit (LitInt m)) = litIntE (n + m)