pipes: Compositional pipelines
"Iteratees done right". This library implements iteratees/enumerators/enumeratees simply and elegantly, but uses different naming conventions.
Advantages over traditional iteratee implementations:
Simpler semantics: There is only one data type (
Pipe), two primitives (awaitandyield), and only one way to composePipes (.). In fact, this library introduces no new operators, using only itsMonadandCategoryinstances to implement all behavior.Clearer naming conventions: Enumeratees are called
Pipes, Enumerators areProducers, and Iteratees areConsumers.Producers andConsumers are just type synonyms forPipes with either the input or output end closed.Pipes are Categories: You compose them using ordinary composition. There are actually two
Categoryinstances: one forLazycomposition and one forStrictcomposition. Both instances satisfy theCategorylaws.Intuitive: Pipe composition is easier to reason about because it is a true
Category. Composition works seamlessly and you don't have to worry about restarting iteratees, feeding new input, etc. "It just works".Vertical concatenation works flawlessly on everything: (
>>) concatenatesPipes, but since everything is aPipe, you can use it to concatenateProducers,Consumers, and even intermediatePipestages. Vertical Concatenation always works the way you expect, picking up where the previousPipeleft off.Symmetric implementation: Most iteratee libraries are either enumerator-driven or iteratee-driven.
Pipes are implemented symmetrically, which is why they can be composed with eitherLazy(Consumer-driven) orStrict(Producer-driven) semantics.
Check out Control.Pipe for a copious introduction (in the spirit of the
iterIO library) and Control.Pipe.Common for the actual implementation.
This library does not yet provide convenience Pipes for common operations,
but they are forthcoming. However, there are several examples in the
documentation to get you started and I encourage you to write your own to see
how easy they are to write.
Downloads
- pipes-1.0.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
| Versions [RSS] | 1.0, 1.0.1, 1.0.2, 2.0.0, 2.1.0, 2.2.0, 2.3.0, 2.4.0, 2.5.0, 3.0.0, 3.1.0, 3.2.0, 3.3.0, 4.0.0, 4.0.1, 4.0.2, 4.1.0, 4.1.1, 4.1.2, 4.1.3, 4.1.4, 4.1.5, 4.1.6, 4.1.7, 4.1.8, 4.1.9, 4.2.0, 4.3.0, 4.3.1, 4.3.2, 4.3.3, 4.3.4, 4.3.5, 4.3.6, 4.3.7, 4.3.8, 4.3.9, 4.3.10, 4.3.11, 4.3.12, 4.3.13, 4.3.14, 4.3.15, 4.3.16 |
|---|---|
| Dependencies | base (>=4 && <5), mtl [details] |
| Tested with | ghc ==7.0.3 |
| License | LicenseRef-GPL |
| Copyright | 2012 Gabriel Gonzalez |
| Author | Gabriel Gonzalez |
| Maintainer | Gabriel439@gmail.com |
| Uploaded | by GabrielGonzalez at 2012-01-14T23:38:52Z |
| Category | Control, Enumerator |
| Bug tracker | mailto:Gabriel439@gmail.com |
| Source repo | head: git clone https://github.com/Gabriel439/Haskell-Pipes-Library |
| Distributions | Arch:4.3.16, Debian:4.3.14, Fedora:4.3.16, LTSHaskell:4.3.16, NixOS:4.3.16, Stackage:4.3.16 |
| Reverse Dependencies | 191 direct, 175 indirect [details] |
| Downloads | 107999 total (166 in the last 30 days) |
| Rating | 2.75 (votes: 10) [estimated by Bayesian average] |
| Your Rating | |
| Status | Docs available [build log] Last success reported on 2016-06-04 [all 1 reports] |