Personal tools

Pipes

From HaskellWiki

(Difference between revisions)
Jump to: navigation, search
(Created a stub with several links)
 
(Upcoming libraries: mention pipes-network-tls)
(5 intermediate revisions by 2 users not shown)
Line 1: Line 1:
{{Stub}}
 
 
 
[[Category:Idioms]]
 
[[Category:Idioms]]
  +
[[Category:Libraries]]
  +
[[Category:Packages]]
  +
  +
Use pipes to create elegant streaming programs within Haskell. Build streaming components and connect them them together to process both events and data.
  +
  +
== Libraries ==
  +
  +
[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:
  +
  +
* 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 [http://hackage.haskell.org/packages/archive/pipes/3.2.0/doc/html/Control-Proxy-Tutorial.html official pipes tutorial] to learn more.
  +
  +
Source code hosted on [https://github.com/Gabriel439/Haskell-Pipes-Library GitHub]
  +
  +
=== pipes-safe ===
  +
  +
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.
   
Pipes are a way to handle streaming data.
+
* [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
   
== Links ==
+
* [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://hackage.haskell.org/package/pipes The pipe package] on Hackage
+
* [http://www.haskellforall.com/2013/04/pipes-concurrency-100-reactive.html pipes-concurrency-1.0.0]: Concurrency support for pipes
* [http://hackage.haskell.org/packages/archive/pkg-list.html#cat:enumerator Pipes packages] on Hackage
 
   
  +
== Upcoming libraries ==
   
=== Blog articles ===
+
* pipes-parse: Parsing support for the pipes ecosystem
   
* [https://pcapriotti.wordpress.com/2012/02/02/an-introduction-to-guarded-pipes/ An introduction to guarded pipes]
+
* pipes-string: Bytestring and Text support
* [http://www.haskellforall.com/2012/03/haskell-for-purists-pipe-finalization.html Haskell for Purists - Pipe Finalization]
 
* [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]
 
   
  +
* pipes-free: Pipe suspension and single-stepping pipes
   
=== See also ===
+
* pipes-network-tls: TLS-secured alternative to pipes-network
* [[Conduit]]
 
* [[Enumerator and iteratee]]
 
* [[Iteratee I/O]]
 
* [[Iteratee]]
 

Revision as of 16:32, 1 May 2013


Use pipes to create elegant streaming programs within Haskell. Build streaming components and connect them them together to process both events and data.

Contents

1 Libraries

Pipes is the official Hackage category for the pipes ecosystem.

1.1 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

1.2 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

1.3 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

2 Community-contributed libraries

2.1 pipes-attoparsec

The pipes-attoparsec library converts attoparsec parsers to pipes for high-performance lazy parsing.

Source code hosted on GitHub

2.2 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

3 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-3.0.0: Major API simplification and consolidation.
  • pipes-3.2.0: ListT integration, Codensity proxy transformer, and ArrowChoice primitives.

4 Upcoming libraries

  • pipes-parse: Parsing support for the pipes ecosystem
  • pipes-string: Bytestring and Text support
  • pipes-free: Pipe suspension and single-stepping pipes
  • pipes-network-tls: TLS-secured alternative to pipes-network