kangaroo: Binary parsing with random access.

[ bsd3, library, parsing ] [ Propose Tags ]

Binary parsing with random access. The target file to be parsed is loaded into memory at the start (represented as an IOUArray Int Word8). Parsing proceeds by moving a cursor around, the array is left intact. This allows _jumping_ inside the file and contrasts with other parser combinators that progress via consuming input.

* Caveat * - the above of course means that the target file is obliged to be small enough to fit into memory.

** MAJOR CAVEAT ** - kangaroo is somewhat half-baked (maybe now two thirds baked). The parsing machinery seems good but the combinators need more work. It's on Hackage because I'm using it with Hurdle which was already on Hackage and the techinique of moving a cursor rather than consuming input seems at least interesting.

Currently kangaroo is twinned with its own library of formatting combinators (JoinPrint), at some point this is may go in its a separate package.

Changelog:

1. 4.0 Changed JoinPrint to have distinct types for single-line documents (Doc) and multi-line documents (VDoc). This is because single-line docs track their horizontal length.

Added a skip primitive to the Parse Monad. Added local and asks to the Reader top-level modules.

1. 3.0 Documented the primitive parsers. char renamed anyChar to match Parsec's convention. Rationalized exports from ParseMonad module.

2. 2.0 Changes to ParseMonad - parsing within a region simplified, temporarily added JoinPrint.

3. 1.0 First version.