Fast combinator parsing for bytestrings and text

Version on this page:0.14.4@rev:3
LTS Haskell 22.29:0.14.4@rev:5
Stackage Nightly 2024-07-13:0.14.4@rev:5
Latest on Hackage:0.14.4@rev:5

See all snapshots attoparsec appears in

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, [email protected].



  • Fix a segmentation fault when built against text-2.0
  • Restructure project to allow more convenient usage of benchmark suite
  • Allow benchmarks to build with GHC 9.2


  • Support for GHC 9.2.1


  • Support for GHC 9.2.1


  • Added Data.Attoparsec.ByteString.getChunk.


  • Added Data.Attoparsec.ByteString.takeWhileIncluding.
  • Make Data.Attoparsec.{Text,ByteString}.Lazy.parseOnly accept lazy input.

  • 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.