[Haskell] ANNOUNCE: Parsec 3.1.0

Derek Elkins derek.a.elkins at gmail.com
Wed Mar 3 23:45:12 EST 2010


Parsec is a monadic combinator library that is well-documented, simple
to use, and produces good error messages.   Parsec is not inherently
lazy/incremental and is not well-suited to handling large quantities
of simply formatted data.  Parsec 3 adds to Parsec the ability to use
Parsec as a monad transformer and generalizes the input Parsec
accepts.  Parsec 3 includes a compatibility layer for Parsec 2 and
should be a drop-in replacement for code using Parsec 2.  Code using
the features of Parsec 3 should use the modules in Text.Parsec.

Due almost entirely to the work of Antoine Latter there is a new
version of Parsec 3 available.  He documented some of his thoughts on
this in this series of blog posts:
http://panicsonic.blogspot.com/2009/12/adventures-in-parsec.html

The main features of this release are:
    - the performance should be much better and comparable to Parsec 2
    - notFollowedBy's type and behavior have been generalized

Changes:
    - the changes to the core of Parsec lead to some changes to when
things get executed when it is used as a monad transformer
        "In the new version bind, return and mplus no longer run in
the inner monad, so if the inner monad was side-effecting for these
actions the behavior of existing code will change."
    - notFollowedBy p now behaves like notFollowedBy (try p) which
changes the behavior slightly when p consumes input, though the
behavior should be more natural now.
    - the set of names exported from Text.Parsec.Prim has changed somewhat


More information about the Haskell mailing list