Ecosyste.ms: Awesome

An open API service indexing awesome lists of open source software.

Awesome Lists | Featured Topics | Projects

https://github.com/bartavelle/fastparser

A fast bytestring parser
https://github.com/bartavelle/fastparser

bytestring fast haskell parsing

Last synced: 10 days ago
JSON representation

A fast bytestring parser

Awesome Lists containing this project

README

        

[![Build Status](https://travis-ci.org/bartavelle/fastparser.svg?branch=master)](https://travis-ci.org/bartavelle/fastparser)

A very simple, backtracking, fast parser combinator library.

It is measurably faster than [attoparsec](https://hackage.haskell.org/package/attoparsec) (36% in [this use case](https://hbtvl.banquise.net/posts/2015-12-14-fastParsing03.html)), but only works on strict `ByteString`, lacks many helper functions, and is not resumable.
It also should consume a tiny bit less memory for equivalent operations.

# When NOT to use fastparser

* When performance is not the **most** pressing concern.
* When you need to parse anything else but strict `ByteString`.
* When you need to use a battle-tested library. While very simple, and in constant use by me, this package is still quite experimental.
* When you need to parse large inputs that are not easily cut into many smaller pieces that can be parsed independently.

# How to use fastparser

`fastparser` works well with small pieces, such as individual log file lines. It is recommended to use it with a coroutine library (such as [conduit](http://hackage.haskell.org/package/conduit) or [pipe](http://hackage.haskell.org/package/pipes)), so that the input could be incrementaly consumed, cut into individual records, all of which would end up parsed independently.

One such setup, with the `conduit` ecosystem, would look like:

sourceFile "/tmp/foo" .| Data.Conduit.Binary.lines .| CL.map (parseOnly parser) .| ...

Other than that, `fastparser` is fairly close to any other parser combinators library.