| Copyright | (c) Andy Gill 2001 (c) Oregon Graduate Institute of Science and Technology 2001 |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | libraries@haskell.org |
| Stability | experimental |
| Portability | non-portable (multi-param classes, functional dependencies) |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Control.Monad.Writer.Lazy
Description
Lazy writer monads.
Inspired by the paper Functional Programming with Overloading and Higher-Order Polymorphism, Mark P Jones (http://web.cecs.pdx.edu/~mpj/pubs/springschool.html) Advanced School of Functional Programming, 1995.
Synopsis
- class (Monoid w, Monad m) => MonadWriter w m | m -> w where
- listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b)
- censor :: MonadWriter w m => (w -> w) -> m a -> m a
- type Writer w = WriterT w Identity
- 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 :: Type -> Type) a = WriterT (m (a, w))
- 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.Fix
- module Control.Monad.Trans
- module Data.Monoid
MonadWriter class
class (Monoid w, Monad m) => MonadWriter w m | m -> w where #
Methods
embeds a simple writer action.writer (a,w)
is an action that produces the output tell ww.
is an action that executes the action listen mm and adds
its output to the value of the computation.
pass :: m (a, w -> w) -> m a #
is an action that executes the action pass mm, which
returns a value and a function, and returns the value, applying
the function to the output.
Instances
| MonadWriter w m => MonadWriter w (MaybeT m) # | |
| Monoid w => MonadWriter w ((,) w) # | NOTE: This instance is only defined for Since: mtl-2.2.2 |
| MonadWriter w m => MonadWriter w (StateT s m) # | |
| MonadWriter w m => MonadWriter w (StateT s m) # | |
| MonadWriter w m => MonadWriter w (ReaderT r m) # | |
| MonadWriter w m => MonadWriter w (IdentityT m) # | |
| MonadWriter w m => MonadWriter w (ExceptT e m) # | Since: mtl-2.2 |
| (Error e, MonadWriter w m) => MonadWriter w (ErrorT e m) # | |
| (Monoid w, Monad m) => MonadWriter w (WriterT w m) # | |
| (Monoid w, Monad m) => MonadWriter w (WriterT w m) # | |
| (Monoid w, Monad m) => MonadWriter w (RWST r w s m) # | |
| (Monoid w, Monad m) => MonadWriter w (RWST r w s m) # | |
listens :: MonadWriter w m => (w -> b) -> m a -> m (a, b) #
censor :: MonadWriter w m => (w -> w) -> m a -> m a #
The Writer monad
runWriter :: Writer w a -> (a, w) Source #
Unwrap a writer computation as a (result, output) pair.
(The inverse of writer.)
execWriter :: Writer w a -> w Source #
Extract the output from a writer computation.
execWriterm =snd(runWriterm)
The WriterT monad transformer
newtype WriterT w (m :: Type -> Type) a Source #
A writer monad parameterized by:
w- the output to accumulate.m- The inner monad.
The return function produces the output mempty, while >>=
combines the outputs of the subcomputations using mappend.
Constructors
| WriterT (m (a, w)) |
Instances
runWriterT :: WriterT w m a -> m (a, w) Source #
execWriterT :: Monad m => WriterT w m a -> m w Source #
Extract the output from a writer computation.
execWriterTm =liftMsnd(runWriterTm)
mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b Source #
Map both the return value and output of a computation using the given function.
runWriterT(mapWriterTf m) = f (runWriterTm)
module Control.Monad
module Control.Monad.Fix
module Control.Monad.Trans
module Data.Monoid