pipes core vs pipes

pcapriotti edited this page Jul 8, 2012 · 2 revisions

pipes-core is a fork of the original pipes package by Gabriel Gonzalez, originated from its 1.0 release.

Differences from pipes-2.1

  • Pipe is a regular (non-indexed) monad.
  • No Frame vs. Pipe distinction.
  • Pipes don't have an await primitive anymore. You need to either handle the case when the upstream pipe terminates explicitly (using tryAwait or awaitE), or use PipeD (see below).
  • New types PipeL (for automatic handling of leftovers) and PipeD (for automatic handling of termination).
  • 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.