addM :: Maybe Int -> Maybe Int -> Maybe Int addM ma mb = do a <- ma b <- mb return (a + b)
addM :: (Monad m, Num a) => m a -> m a -> m a
addM (Just 5) (Just 10) == Just 15
addM [1, 2] [4, 8] == [1 + 4, 1 + 8, 2 + 4, 2 + 8] == [5, 9, 6, 10]
addM (Right 42) (Left "NaN") == Left "NaN"