pa-field-parser: “Vertical” parsing of values

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.1, 0.1.0.1, 0.2.0.0, 0.2.0.1, 0.3.0.0, 0.3.1.0
Change log CHANGELOG.md
Dependencies aeson, aeson-better-errors, attoparsec, base (<5), case-insensitive, containers, pa-error-tree, pa-prelude, scientific, semigroupoids, text [details]
License BSD-3-Clause
Copyright 2023 Possehl Analytics GmbH
Author
Maintainer Philip Patsch <philip.patsch@possehl-analytics.com>
Category Data, Possehl-Analytics
Home page https://github.com/possehl-analytics/pa-hackage
Uploaded by Profpatsch at 2023-05-22T16:28:24Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for pa-field-parser-0.1.0.1

[back to package description]

pa-field-parser

A small library for “vertical parsing” of values.

Traditional parsers are “horizontal” parsers, they take a flat list of tokens and produce structure:


[  token1 token2 token3 token4 token5 ]
----> horizontal parser

result:

- token1
|
`-- token2
|
`-- token3
  |
  `-- token 4 -- token 5

A FieldParser is a “vertical” parser. Once you have some low-level type in hand, usually you want to do some more checks, to “upgrade” it so to say:


  Integer
    ^
    | signedDecimal
    |
   Text
    ^
    | utf8
    |
ByteString

As a FieldParser, this would look like:

utf8 :: FieldParser ByteString Text
signedDecimal :: FieldParser Text Integer

(utf8 >>> signedDecimal) :: FieldParser ByteString Integer

>>> is from Control.Category, but Profunctor is also available to map over the left and right arguments.

When run, this produces either a value or a helpful error message.

They can be freely combined with other libraries, and act as a nice adapter between them. For example, the JSON-related functions integrate with aeson-better-errors and any FieldParser Value a can be converted to a FromJSON instance for aeson. attoparsec is also available to easily turn bytes or text parsers into FieldParsers.

You can use this library as-is, but the design is easily adaptable to your codebase, the idea is very simple. Feel free to copy and paste what you need.