transformers-0.3.0.0: Concrete functor and monad transformers

Portabilityportable
Stabilityexperimental
Maintainerross@soi.city.ac.uk
Safe HaskellSafe-Inferred

Control.Monad.Trans.Writer.Lazy

Contents

Description

The lazy WriterT monad transformer, which adds collection of outputs (such as a count or string output) to a given monad.

This version builds its output lazily; for a strict version, see Control.Monad.Trans.Writer.Strict, which has the same interface.

This monad transformer provides only limited access to the output during the computation. For more general access, use Control.Monad.Trans.State instead.

Synopsis

The Writer monad

type Writer w = WriterT w Identity

A writer monad parameterized by the type w of output to accumulate.

The return function produces the output mempty, while >>= combines the outputs of the subcomputations using mappend.

writer :: Monad m => (a, w) -> WriterT w m a

Construct a writer computation from a (result, output) pair. (The inverse of runWriter.)

runWriter :: Writer w a -> (a, w)

Unwrap a writer computation as a (result, output) pair. (The inverse of writer.)

execWriter :: Writer w a -> w

Extract the output from a writer computation.

mapWriter :: ((a, w) -> (b, w')) -> Writer w a -> Writer w' b

Map both the return value and output of a computation using the given function.

The WriterT monad transformer

newtype WriterT w m a

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 

Fields

runWriterT :: m (a, w)
 

Instances

Monoid w => MonadTrans (WriterT w) 
(Monoid w, Monad m) => Monad (WriterT w m) 
Functor m => Functor (WriterT w m) 
(Monad (WriterT w m), Monoid w, MonadFix m) => MonadFix (WriterT w m) 
(Monad (WriterT w m), Monoid w, MonadPlus m) => MonadPlus (WriterT w m) 
(Functor (WriterT w m), Monoid w, Applicative m) => Applicative (WriterT w m) 
Foldable f => Foldable (WriterT w f) 
(Functor (WriterT w f), Foldable (WriterT w f), Traversable f) => Traversable (WriterT w f) 
(Applicative (WriterT w m), Monoid w, Alternative m) => Alternative (WriterT w m) 
(Monad (WriterT w m), Monoid w, MonadIO m) => MonadIO (WriterT w m) 

execWriterT :: Monad m => WriterT w m a -> m w

Extract the output from a writer computation.

mapWriterT :: (m (a, w) -> n (b, w')) -> WriterT w m a -> WriterT w' n b

Map both the return value and output of a computation using the given function.

Writer operations

tell :: (Monoid w, Monad m) => w -> WriterT w m ()

tell w is an action that produces the output w.

listen :: (Monoid w, Monad m) => WriterT w m a -> WriterT w m (a, w)

listen m is an action that executes the action m and adds its output to the value of the computation.

listens :: (Monoid w, Monad m) => (w -> b) -> WriterT w m a -> WriterT w m (a, b)

listens f m is an action that executes the action m and adds the result of applying f to the output to the value of the computation.

pass :: (Monoid w, Monad m) => WriterT w m (a, w -> w) -> WriterT w m a

pass m is an action that executes the action m, which returns a value and a function, and returns the value, applying the function to the output.

censor :: (Monoid w, Monad m) => (w -> w) -> WriterT w m a -> WriterT w m a

censor f m is an action that executes the action m and applies the function f to its output, leaving the return value unchanged.

Lifting other operations

liftCallCC :: Monoid w => ((((a, w) -> m (b, w)) -> m (a, w)) -> m (a, w)) -> ((a -> WriterT w m b) -> WriterT w m a) -> WriterT w m a

Lift a callCC operation to the new monad.

liftCatch :: (m (a, w) -> (e -> m (a, w)) -> m (a, w)) -> WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a

Lift a catchError operation to the new monad.