**Packages**- transformers
- mtl
- bytestring
- package

Construct a writer computation from a (result, output) pair.

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

The WriterT monad transformer. This version is lazy; for a strict version, see Control.Monad.Trans.Writer.Strict, which has the same interface.

The MonadWriter class.
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.

transformers Control.Monad.Trans.Writer.Lazy, transformers Control.Monad.Trans.Writer.Strict, mtl Control.Monad.Writer.Lazy, mtl Control.Monad.Writer.Strict

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.

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.

A BufferWriter represents the result of running a Builder. It unfolds as a sequence of chunks of data. These chunks come in two forms:
* an IO action for writing the Builder's data into a user-supplied memory buffer.
* a pre-existing chunks of data represented by a strict ByteString
While this is rather low level, it provides you with full flexibility in how the data is written out.
The BufferWriter itself is an IO action: you supply it with a buffer (as a pointer and length) and it will write data into the buffer. It returns a number indicating how many bytes were actually written (which can be 0). It also returns a Next which describes what comes next.

transformers Control.Monad.Trans.Writer.Lazy, transformers Control.Monad.Trans.Writer.Strict, mtl Control.Monad.Writer.Lazy, mtl Control.Monad.Writer.Strict

transformers Control.Monad.Trans.Writer.Lazy, transformers Control.Monad.Trans.Writer.Strict, mtl Control.Monad.Writer.Lazy, mtl Control.Monad.Writer.Strict

Extract the output from a writer computation.
* m = liftM snd
> (runWriterT

Map both the return value and output of a computation using the given function.
* (mapWriter f m) = f (runWriter
>

Map both the return value and output of a computation using the given function.
* (mapWriterT f m) = f
> (runWriterT

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

This is a version of the RWS monad transformers that should be much faster than what's found in transformers. The writer in the strict version does not leak memory.
Version 0.2.0

It can scarcely be denied that the supreme goal of all theory is to make the irreducible basic elements as simple and as few as possible without having to surrender the adequate representation of a single datum of experience. Albert Einstein
Check out more examples in test/Main.hs and look at the results with --enable-tests.
Version 0.1.1.1