-- | Dual to Control.Monad.Trans module Control.Monad.Unlift ( Unlift(..) ) where import Control.Monad.Reader import Control.Monad.Writer class Unlift t where unlift :: (Monad m) => t m a -> t m (m a) instance Unlift (ReaderT r) where unlift e = do r <- ask return (runReaderT e r) instance (Monoid w) => Unlift (WriterT w) where unlift e = do return $ (runWriterT e >>= return . fst)