import Data.Map data Expression = Number Int | Add Expression Expression | Multiply Expression Expression | Variable String evaluate :: Map String Int -> Expression -> Int evaluate env (Number x) = x evaluate env (Add x y) = evaluate env x + evaluate env y evaluate env (Multiply x y) = evaluate env x * evaluate env y evaluate env (Variable x) = findWithDefault 0 x env environment = fromList([("a",3), ("b",4), ("c",7)]) expressionTree = Add (Variable "a") (Multiply (Number 2) (Variable "b")) result = evaluate environment expressionTree