[Haskell-cafe] ANNOUNCE: pipes-core 0.0.1

Paolo Capriotti p.capriotti at gmail.com
Sat Mar 10 01:36:46 CET 2012

I'm pleased to announce the release of version 0.0.1 of pipes-core, a
library for efficient, safe and compositional IO, similar in scope to
iteratees and conduits.


This is a reimplementation of the original 'Pipe' concept by Gabriel
Gonzales. The package documentation contains an introduction to Pipes
and a detailed tutorial, so here I'll just outline some of the
differences from the original version:

 - A single composition operator. "Strict" composition has been
removed, since its role wasn't actually that clear, and its purpose
for resource finalization has been replaced by better constructs (see
 - A new primitive 'tryAwait', which makes it possible to recover from
termination of an upstream pipe. Using 'tryAwait' you can write pipes
that are able to consume all their input and return a value (like
iteratees or Conduit's sinks can), and stateful pipes that can make
use of their final state before terminating.
 - Full exception safety and exception-handling primitives. Pipes have
been augmented with 'catch' and 'finally' primitives, which allow you
to recover from exceptions and ensure finalization of resources within
the Pipe monad. There's no more need to use resource-simple or monadic
regions together with Pipes.
- Multi-channel pipes. This is a generalization of Arrows using sums
instead of pairs for contexts. We provide a number of combinators that
allow you to combine Pipes in much the same way as Arrows, although
there is not unfortunately an alternative for the Arrow syntax.

Together with pipes-core, I also released a number of accessory
packages with various utilities. Here is a complete list:

 * pipes-extra: File readers and writers, chunk pipes.

 * pipes-attoparsec: Utilities to convert a parser into a pipe.

 * pipes-conduit: Conduit adapters.

 * pipes-network: Utilities to deal with sockets. Ported from conduit.

 * pipes-zlib: Pipes to deal with zipped data. Ported from conduit.

This is an experimental release, but it should be equipped with all
the functionality needed to write serious applications. I encourage
people to try it out and send feedback if anything looks too
simplistic or too limiting.

Paolo Capriotti

More information about the Haskell-Cafe mailing list