module Arithmetik_Eval where
import Arithmetik_Type
eval :: Term -> Integer
eval t = case key t of
Constant n -> n
Operator o -> let [ l, r ] = map eval $ children t
f = meaning o
in f l r
meaning :: Op -> (Integer -> Integer -> Integer)
meaning Plus = (+)
meaning Minus = (-)
meaning Mal = (*)
meaning Durch = div