{- A multiline comment which can continue for many lines -} data Expr = Val Int | Div Expr Expr -- data Maybe a = Nothing | Just a eval :: Expr -> Maybe Int eval (Val n) = return n eval (Div x y) = eval x >>= (\n -> eval y >>= (\m -> safediv n m)) safediv :: Int -> Int -> Maybe Int safediv n m = if m == 0 then Nothing else Just (n `div` m) {- m >>= f = case m of Nothing -> Nothing Just x -> f x -} -- Just 4 >>= (\x -> Just (x+1)) -- eval (Div (Val 5) (Val 3)) -- eval (Div (Val 5) (Val 0))