data Maybe a = Just a | Nothing
typische Benutzung:
case ( evaluate e l ) of
    Nothing -> Nothing
    Just a  -> case ( evaluate e r ) of
        Nothing -> Nothing
        Just b  -> Just ( a + b )
äquivalent 
(mit passendem (>>=) und return)
evaluate e l >>= \ a ->
    evaluate e r >>= \ b ->
        return ( a + b )