simplify :: Expr -> Expr data Expr = Num Int | Va1 String | Var String | Add Expr Expr | Sub Expr Expr | Mul Expr Expr deriving Show simplify (Add x (Num 0)) = x simplify (Add (Num 0) x) = x simplify (Sub x (Num 0)) = x simplify (Mul x (Num 1)) = x simplify (Mul (Num 1) x) = x simplify (Mul x (Num 0)) = (Num 0) simplify (Mul (Num 0) x) = (Num 0) simplify (Add x y) = Add (simplify x) (simplify y) simplify (Sub x y) = Sub (simplify x) (simplify y) simplify (Mul x y) = Mul (simplify x) (simplify y)