both :: (Monad m) => m a -> m b -> m (a, b) both ma mb = do a <- ma b <- mb return (a, b)