module MonadTools(module MonadTools, module Monad, liftM0, liftM6) where import Monad strength1 :: Monad m => (m a,b) -> m (a,b) strength1 ~(m,b) = m >>= \a-> return (a,b) -- liftM (`pair` b) m strength2 :: Monad m => (a,m b) -> m (a,b) strength2 ~(a,m) = m >>= \b-> return (a,b) -- liftM (pair a) m (@@) :: Monad m => (b->m c) -> (a->m b) -> (a->m c) f @@ g = \y -> g y >>= f liftM0 :: Monad m => a -> m a liftM0 = return liftM6 f a1 a2 a3 a4 a5 a6 = liftM5 f a1 a2 a3 a4 a5 `ap` a6