module Simplify where 

--
-- Aufgabe 8 - Ausdrucksvereinfachung
--
-------------------------------------------------------------------
data Expr = Var String    | Val Int 
          | Add Expr Expr | Mult Expr Expr 
          deriving Show

simplify (Var  cs)    = (Var cs)
simplify (Val  n)     = (Val n)
simplify (Add  e1 e2) = combine (Add  (simplify e1) (simplify e2))
simplify (Mult e1 e2) = combine (Mult (simplify e1) (simplify e2))

combine :: Expr -> Expr
combine (Add  (Val n) (Val m)) = Val (n+m)
combine (Mult (Val n) (Val m)) = Val (n*m)
combine expr                   = expr