Deprecated in favor of pipes
This library offers an abstraction similar in scope to
iteratees/enumerators/enumeratees, but with different characteristics and
naming conventions.
This package is a fork of the original pipes package by Gabriel Gonzalez.
See https://github.com/pcapriotti/pipes-core/wiki/pipes-core-vs-pipes for a
comparison between the two packages.
Differences with traditional iteratees:
Simpler semantics: There is only one data type (Pipe), two basic
primitives (await and yield), and only one way to compose Pipes
(>+>). In fact, (>+>) is just convenient syntax for the composition
operator in Category. Most pipes can be implemented just using the
Monad instance and composition.
Different naming conventions: Enumeratees are called Pipes, Enumerators
are Producers, and Iteratees are Consumers. Producers and Consumers
are just type synonyms for Pipes with either the input or output end
closed.
Pipes form a Category: that means that composition is associative, and
that there is an identity Pipe.
"Vertical" concatenation works on every 'Pipe': (>>), concatenates
Pipes. Since everything is a Pipe, you can use it to concatenate
Producers, Consumers, and even intermediate Pipe stages. Vertical
concatenation can be combined with composition to create elaborate
combinators, without the need of executing pipes in "passes" or resuming
partially executed pipes.
Check out Control.Pipe for a copious introduction (in the spirit of the
iterIO library), and Control.Pipe.Combinators for some basic combinators
and Pipe examples.