Difference between revisions of "Pipes"
(Added a link to Control.Proxy.Tutorial on Hackage) |
(Expanding the original stub) |
||
Line 1: | Line 1: | ||
+ | [[Category:Composition,Idioms,Libraries,Packages]] |
||
− | {{Stub}} |
||
+ | Use pipes to create elegant streaming programs within Haskell. Build streaming components and connect them them together to process both events and data. |
||
− | [[Category:Idioms]] |
||
+ | == Libraries == |
||
− | Pipes are a way to handle streaming data; for an introductory tutorial see [http://hackage.haskell.org/packages/archive/pipes/3.2.0/doc/html/Control-Proxy-Tutorial.html Control.Proxy.Tutorial on Hackage]. |
||
+ | [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:pipes Pipes] is the official Hackage category for the pipes ecosystem. |
||
− | == |
+ | === pipes === |
− | + | The [http://hackage.haskell.org/package/pipes pipes] package is the core library which emphasizes: |
|
− | * [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:enumerator Pipes packages] on Hackage |
||
+ | * Elegance and Simplicity |
||
+ | * Speed |
||
+ | * Lightweight dependencies |
||
+ | The pipes library offers many unique features not available in other streaming libraries: |
||
− | === Blog articles === |
||
+ | * Bidirectional streams |
||
− | * [http://paolocapriotti.com/blog/2012/05/29/pipes-2.0-vs-pipes-core/ Pipes 2.0 vs Pipes-core] |
||
+ | * Extension framework |
||
− | * [https://pcapriotti.wordpress.com/2012/02/02/an-introduction-to-guarded-pipes/ An introduction to guarded pipes] |
||
+ | * Elegant ListT interconversions |
||
− | * [http://www.haskellforall.com/2012/03/haskell-for-purists-pipe-finalization.html Haskell for Purists - Pipe Finalization] |
||
+ | * Correctness proofs for the entire library |
||
− | * [http://www.haskellforall.com/2012/05/pipes-20-pipe-finalization.html pipes 2.0 - Pipe Finalization] |
||
− | * [https://pcapriotti.wordpress.com/2012/02/04/monoidal-instances-for-pipes/ Monoidal instances for pipes] |
||
+ | Read the [http://hackage.haskell.org/packages/archive/pipes/3.2.0/doc/html/Control-Proxy-Tutorial.html official pipes tutorial] to learn more. |
||
− | === See also === |
||
+ | |||
− | * [[Conduit]] |
||
+ | Source code hosted on [https://github.com/Gabriel439/Haskell-Pipes-Library GitHub] |
||
− | * [[Enumerator and iteratee]] |
||
+ | |||
− | * [[Iteratee I/O]] |
||
+ | === pipes-safe === |
||
− | * [[Iteratee]] |
||
+ | |||
+ | The [http://hackage.haskell.org/package/pipes-safe pipes-safe] package adds resource management and exception safety to the pipes ecosystem. pipes-safe offers many high-level features such as: |
||
+ | |||
+ | * Complete exception safety, including asynchronous exceptions |
||
+ | * Termination safety |
||
+ | * Resources are freed in reverse order of acquisition |
||
+ | |||
+ | Additionally, pipes-safe is the only streaming library that provides truly native exception handling, allowing you to seamlessly handle exceptions and resume uninterrupted streaming. |
||
+ | |||
+ | Read the [http://hackage.haskell.org/packages/archive/pipes-safe/1.1.0/doc/html/Control-Proxy-Safe-Tutorial.html official pipes-safe tutorial] to learn more. |
||
+ | |||
+ | Source code hosted on [https://github.com/Gabriel439/Haskell-Pipes-Safe-Library GitHub] |
||
+ | |||
+ | === pipes-concurrency === |
||
+ | |||
+ | The [http://hackage.haskell.org/package/pipes-concurrency pipes-concurrency] package adds powerful and light-weight concurrency primitives to the pipes ecosystem. Use these primitives to: |
||
+ | |||
+ | * Build reactive event-driven programs |
||
+ | * Merge and split streams |
||
+ | * Communicate between multiple concurrent pipelines |
||
+ | * Manage multiple resources simultaneously |
||
+ | |||
+ | The pipes-concurrency library offers several features unavailable in other streaming libraries such as: |
||
+ | |||
+ | * Deadlock safety |
||
+ | * Cyclic communication graphs |
||
+ | * Dynamically changing graph topologies |
||
+ | |||
+ | Read the [http://hackage.haskell.org/packages/archive/pipes-concurrency/1.0.0/doc/html/Control-Proxy-Concurrent-Tutorial.html official pipes-concurrency tutorial] to learn more. |
||
+ | |||
+ | Source code hosted on [https://github.com/Gabriel439/Haskell-Pipes-Concurrency-Library GitHub] |
||
+ | |||
+ | == Community-contributed libraries == |
||
+ | |||
+ | === pipes-attoparsec === |
||
+ | |||
+ | The [http://hackage.haskell.org/package/pipes-attoparsec pipes-attoparsec] library converts [http://hackage.haskell.org/package/attoparsec attoparsec] parsers to pipes for high-performance lazy parsing. |
||
+ | |||
+ | Source code hosted on [https://github.com/k0001/pipes-attoparsec GitHub] |
||
+ | |||
+ | === pipes-network === |
||
+ | |||
+ | The [http://hackage.haskell.org/package/pipes-network pipes-network] library converts server and client sockets to pipes to seamlessly stream data over any network. |
||
+ | |||
+ | Source code hosted on [https://github.com/k0001/pipes-network GitHub] |
||
+ | |||
+ | == Announcements == |
||
+ | |||
+ | * [http://www.reddit.com/r/haskell/comments/ohjg7/a_new_approach_to_iteratees/ pipes-1.0.0]: The original announcement, which first introduced the concept of unifying sources and sinks and transducers into a single [http://www.haskell.org/ghc/docs/latest/html/libraries/base/Control-Category.html Category]. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/05/pipes-20-pipe-finalization.html pipes-2.0.0]: The introduction of Frames, later deprecated in favor of pipes-safe. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/07/pipes-21-and-index-core-10-indexed.html pipes-2.1.0]: Transition of Frames to indexed monads, later deprecated in favor of pipes-safe. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/09/pipes-23-bidirectional-pipes.html pipes-2.3.0]: The introduction of bidirectional Proxies, which evolved into modern pipes. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/10/pipes-24-proxy-transformers-extra.html pipes-2.4.0]: The release of the proxy transformer extension system. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/10/pipes-25-faster-and-slimmer.html pipes-2.5.0]: Major performance improvements. |
||
+ | |||
+ | * [http://www.haskellforall.com/2012/12/pipes-30-simpler-unified-api.html pipes-3.0.0]: Major API simplification and consolidation. |
||
+ | |||
+ | * [http://www.haskellforall.com/2013/01/pipes-safe-10-resource-management-and.html pipes-safe-1.0.0]: Resource safety and exception management |
||
+ | |||
+ | * [http://www.haskellforall.com/2013/03/pipes-32-listt-codensity-arrowchoice.html pipes-3.2.0]: ListT integration, Codensity proxy transformer, and ArrowChoice primitives. |
||
+ | |||
+ | * [http://www.haskellforall.com/2013/04/pipes-concurrency-100-reactive.html pipes-concurrency-1.0.0]: Concurrency support for pipes |
||
+ | |||
+ | == Upcoming libraries == |
||
+ | |||
+ | * pipes-parse: Parsing support for the pipes ecosystem |
||
+ | |||
+ | * pipes-string: Bytestring and Text support |
||
+ | |||
+ | * pipes-free: Pipe suspension and single-stepping pipes |
Revision as of 04:13, 17 April 2013
Use pipes to create elegant streaming programs within Haskell. Build streaming components and connect them them together to process both events and data.
Libraries
Pipes is the official Hackage category for the pipes ecosystem.
pipes
The pipes package is the core library which emphasizes:
- Elegance and Simplicity
- Speed
- Lightweight dependencies
The pipes library offers many unique features not available in other streaming libraries:
- Bidirectional streams
- Extension framework
- Elegant ListT interconversions
- Correctness proofs for the entire library
Read the official pipes tutorial to learn more.
Source code hosted on GitHub
pipes-safe
The pipes-safe package adds resource management and exception safety to the pipes ecosystem. pipes-safe offers many high-level features such as:
- Complete exception safety, including asynchronous exceptions
- Termination safety
- Resources are freed in reverse order of acquisition
Additionally, pipes-safe is the only streaming library that provides truly native exception handling, allowing you to seamlessly handle exceptions and resume uninterrupted streaming.
Read the official pipes-safe tutorial to learn more.
Source code hosted on GitHub
pipes-concurrency
The pipes-concurrency package adds powerful and light-weight concurrency primitives to the pipes ecosystem. Use these primitives to:
- Build reactive event-driven programs
- Merge and split streams
- Communicate between multiple concurrent pipelines
- Manage multiple resources simultaneously
The pipes-concurrency library offers several features unavailable in other streaming libraries such as:
- Deadlock safety
- Cyclic communication graphs
- Dynamically changing graph topologies
Read the official pipes-concurrency tutorial to learn more.
Source code hosted on GitHub
Community-contributed libraries
pipes-attoparsec
The pipes-attoparsec library converts attoparsec parsers to pipes for high-performance lazy parsing.
Source code hosted on GitHub
pipes-network
The pipes-network library converts server and client sockets to pipes to seamlessly stream data over any network.
Source code hosted on GitHub
Announcements
- pipes-1.0.0: The original announcement, which first introduced the concept of unifying sources and sinks and transducers into a single Category.
- pipes-2.0.0: The introduction of Frames, later deprecated in favor of pipes-safe.
- pipes-2.1.0: Transition of Frames to indexed monads, later deprecated in favor of pipes-safe.
- pipes-2.3.0: The introduction of bidirectional Proxies, which evolved into modern pipes.
- pipes-2.4.0: The release of the proxy transformer extension system.
- pipes-2.5.0: Major performance improvements.
- pipes-3.0.0: Major API simplification and consolidation.
- pipes-safe-1.0.0: Resource safety and exception management
- pipes-3.2.0: ListT integration, Codensity proxy transformer, and ArrowChoice primitives.
- pipes-concurrency-1.0.0: Concurrency support for pipes
Upcoming libraries
- pipes-parse: Parsing support for the pipes ecosystem
- pipes-string: Bytestring and Text support
- pipes-free: Pipe suspension and single-stepping pipes