Fast combinator parsing for bytestrings and text

Version on this page:
LTS Haskell 12.22:
Stackage Nightly 2018-12-12:
Latest on Hackage:

See all snapshots attoparsec appears in

BSD3 licensed by Bryan O'Sullivan
Maintained by Bryan O'Sullivan, Ben Gamari

Module documentation for

There are no documented modules for this package.

Welcome to attoparsec

attoparsec is a fast Haskell parser combinator library, aimed particularly at dealing efficiently with network protocols and complicated text/binary file formats.

Join in!

I’m happy to receive bug reports, fixes, documentation enhancements, and other improvements.

Please report bugs via the github issue tracker.

Master git repository:

  • git clone git://


This library is written and maintained by Bryan O’Sullivan,


  • Improved performance of Data.Attoparsec.Text.asciiCI

  • pure is now strict in Position

  • Restore the fast specialised character set implementation for Text
  • Move testsuite from test-framework to tasty
  • Performance optimization of takeWhile and takeWhile1

  • Made the parser type in the Zepto module a monad transformer (needed by aeson’s string unescaping parser).

  • Fixed a case folding bug in the ByteString version of stringCI.

  • Fixed an indexing bug in the new Text implementation of string, reported by Michel Boucey.

  • Now compatible with GHC 7.9

  • Reintroduced the Chunk class, used by the parsers package

  • A new internal representation makes almost all real-world parsers faster, sometimes by big margins. For example, parsing JSON data with aeson is now up to 70% faster. These performance improvements also come with reduced memory consumption and some new capabilities.

  • The new match combinator gives both the result of a parse and the input that it matched.

  • The test suite has doubled in size. This made it possible to switch to the new internal representation with a decent degree of confidence that everything was more or less working.

  • The benchmark suite now contains a small family of benchmarks taken from real-world uses of attoparsec.

  • A few types that ought to have been private now are.

  • A few obsolete modules and functions have been marked as deprecated. They will be removed from the next major release.

  • The new Chunk typeclass allows for some code sharing with Ed Kmett’s parsers package:

  • New function runScanner generalises scan to return the final state of the scanner as well as the input consumed.

  • New dependency: the scientific package. This allows us to parse numbers much more efficiently.

  • peekWord8’, peekChar’: new primitive parsers that allow single-character lookahead.

comments powered byDisqus