packages feed

AutoForms-0.4.0: src/Control/Monad/Unlift.hs

-- | 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)