Name: pipes Version: 1.0.2 Cabal-Version: >=1.10.1 Build-Type: Simple License: BSD3 License-File: LICENSE Copyright: 2012 Gabriel Gonzalez Author: Gabriel Gonzalez Maintainer: Gabriel439@gmail.com Stability: Experimental Bug-Reports: mailto:Gabriel439@gmail.com Synopsis: Compositional pipelines Description: \"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 ('await' and 'yield'), and only one way to compose 'Pipe's ('.'). In fact, this library introduces no new operators, using only its 'Monad' and 'Category' instances to implement all behavior. . * /Clearer naming conventions/: Enumeratees are called 'Pipe's, Enumerators are 'Producer's, and Iteratees are 'Consumer's. 'Producer's and 'Consumer's are just type synonyms for 'Pipe's with either the input or output end closed. . * /Pipes are Categories/: You compose them using ordinary composition. There are actually two 'Category' instances: one for 'Lazy' composition and one for 'Strict' composition. Both instances satisfy the 'Category' laws. . * /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/: ('>>') concatenates 'Pipe's, but since everything is a 'Pipe', you can use it to concatenate 'Producer's, 'Consumer's, and even intermediate 'Pipe' stages. Vertical Concatenation always works the way you expect, picking up where the previous 'Pipe' left off. . * /Symmetric implementation/: Most iteratee libraries are either enumerator-driven or iteratee-driven. 'Pipe's are implemented symmetrically, which is why they can be composed with either 'Lazy' ('Consumer'-driven) or 'Strict' ('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 'Pipe's 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. Category: Control, Enumerator Tested-With: GHC ==7.0.3 Source-Repository head Type: git Location: https://github.com/Gabriel439/Haskell-Pipes-Library Library Build-Depends: base >= 4 && < 5, mtl, void Exposed-Modules: Control.Pipe, Control.Pipe.Common GHC-Options: -O2 Default-Language: Haskell2010