[Haskell-cafe] ANNOUNCE: iterIO-0.1 - iteratee-based IO with pipe operators

David Mazieres dm-list-haskell-cafe at scs.stanford.edu
Fri May 6 06:15:40 CEST 2011

Hi, everyone.  I'm pleased to announce the release of a new iteratee
implementation, iterIO:


IterIO is an attempt to make iteratees easier to use through an
interface based on pipeline stages reminiscent of Unix command
pipelines.  Particularly if you've looked at iteratees before and been
intimidated, please have a look at iterIO to see if it makes them more

Some aspects of iterIO that should simplify learning and using
iteratees are:

   * Every aspect of the library is thoroughly document in haddock
     including numerous examples of use.

   * Enumerators are easy to build out of iteratees.

   * There is no difference between enumerators and "enumeratees"
     (i.e., inner pipeline stages).  The former is just a
     type-restricted version of the latter.

   * Parsing combinators provide detailed error reporting and support
     LL(*) rather than LL(1) parsing, leading to fewer non-intuitive
     parsing failures.  A couple of tricks avoid consuming excessive
     memory for backtracking.

   * Super-fast LL(1) parsing is also available through seamless
     integration with attoparsec.

   * A universal exception mechanism works across invocations of mtl
     monad transformers, thereby unifying error handling.

   * All pipe operators have uniform semantics, eliminating corner
     cases.  In particular, if the writing end of a pipe fails, the
     reading end always gets EOF, allowing it to clean up resources.

   * One can catch exceptions thrown by any contiguous subset of
     stages in a pipeline.  Moreover, enumerator exception handlers
     can resume downstream stages that haven't failed.

   * The package is full of useful iteratees and enumerators,
     including basic file and socket processing, parsec-like
     combinators, string search, zlib/gzip compression, SSL, HTTP, and
     "loopback" enumerator/iteratee pairs for testing a protocol
     implementation against itself.

Please enjoy.  I'd love to hear feedback.


More information about the Haskell-Cafe mailing list