data Expression = ... | Reference Identifier evaluate :: Environment -> Expression -> Integer ?? :: Environment -> Expression -> Maybe Integer evaluate e x = case x of Reference i -> M.lookup i e Plus l r -> case ( evaluate e l ) of Nothing -> Nothing Just a -> case ( evaluate e r ) of Nothing -> Nothing Just b -> Just ( a + b )das schöner hinschreiben mit Monaden und do-Notation