Is the composition of an arbitrary monad with a traversable always a monad?
问题 If I have two monads m and n , and n is traversable, do I necessarily have a composite m -over- n monad? More formally, here's what I have in mind: import Control.Monad import Data.Functor.Compose prebind :: (Monad m, Monad n) => m (n a) -> (a -> m (n b)) -> m (n (m (n b))) mnx `prebind` f = do nx <- mnx return $ do x <- nx return $ f x instance (Monad m, Monad n, Traversable n) => Monad (Compose m n) where return = Compose . return . return Compose mnmnx >>= f = Compose $ do nmnx <- mnmnx