All pastes #259991 Raw Edit

Something

public text v1 · immutable
#259991 ·published 2006-11-27 22:37 UTC
rendered paste body
data Expr = Num Int
          | Add Expr Expr
          | Mult Expr Expr
          deriving (Show)

main = do
    print $ simplifyExpr (Add (Add (Num 0) (Num 1)) (Mult (Num 2) (Num 3)))
    getLine

simplify (Add (Num 0) x) = x
simplify (Add x (Num 0)) = x
simplify (Mult (Num 1) x) = x
simplify (Mult x (Num 1)) = x
simplify x = x

traverseExpr f (Add x y) = f $ Add (traverseExpr f x) (traverseExpr f y)
traverseExpr f (Mult x y) = f $ Mult (traverseExpr f x) (traverseExpr f y)
traverseExpr _ x = x

simplifyExpr = traverseExpr simplify