class (Monoid w, Monad m) => MonadWriter w m | m -> w where |
tell :: w -> m () | listen :: m a -> m (a, w) | pass :: m (a, w -> w) -> m a |
|
|
listens :: MonadWriter w m => (w -> w) -> m a -> m (a, w) |
|
censor :: MonadWriter w m => (w -> w) -> m a -> m a |
|
newtype Writer w a = Writer {} |
|
runWriter :: Writer w a -> (a, w) |
|
execWriter :: Writer w a -> w |
|
mapWriter :: ((a, w) -> (b, w')) -> Writer w a -> Writer w' b |
|
newtype WriterT w m a = WriterT {} |
|
runWriterT :: WriterT w m a -> m (a, w) |
|
execWriterT :: Monad m => WriterT w m a -> m w |
|
mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b |
|
module Control.Monad |
|
module Control.Monad.Monoid |
|
module Control.Monad.Fix |
|
module Control.Monad.Trans |