pipes
pipes
is a clean and powerful stream processing library that lets you build
and connect reusable streaming components.
Quick start
- Install the Haskell Platform
cabal install pipes
Then fire up ghci
:
$ ghci
Prelude> import Pipes
Prelude Pipes> import qualified Pipes.Prelude as P
… and echo standard input to standard output until you enter quit
.
Prelude Pipes P> runEffect $ P.stdinLn >-> P.takeWhile (/= "quit") >-> P.stdoutLn
Test[Enter]
Test
Apple[Enter]
Apple
quit[Enter]
Prelude P> -- Done!
To learn more, read the pipes tutorial.
Features
Concise API: Use simple commands like
for
,(>->)
,await
, andyield
Blazing fast: Implementation tuned for speed, including shortcut fusion
Lightweight Dependency:
pipes
is small and compiles very rapidly, including dependenciesElegant semantics: Use practical category theory
ListT: Correct implementation of
ListT
that interconverts with pipesBidirectionality: Implement duplex channels
Extensive Documentation: Second to none!
Philosophy
The pipes
library emphasizes the following three design precepts:
Emphasize elegance - Elegant libraries replace inelegant libraries
Theory everywhere - Principled design promotes intuitive behavior
Minimize dependencies - Small dependency profiles maximize portability
Development Status
pipes
is stable, and current work focuses on packaging pipes
for various
package managers. The long term goal is to get pipes
into the Haskell
platform and become the basic building block for streaming APIs.
Community Resources
How to contribute
Contribute code
Build derived libraries
Write
pipes
tutorials