parse: Simple way to parse strings with Python-like format strings.

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]

Please refer to the README file that ships with this package.


[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.1.0
Change log ChangeLog.md
Dependencies base (>=4.7 && <5), split (==0.2.3.4), template-haskell (==2.16.0.0) [details]
License BSD-3-Clause
Copyright Jacob Lagares Pozo
Author Jacob Lagares Pozo
Maintainer jlagarespo@protonmail.com
Category Parser
Home page https://github.com/jlagarespo/parse#readme
Bug tracker https://github.com/jlagarespo/parse/issues
Source repo head: git clone https://github.com/jlagarespo/parse
Uploaded by moonsheep at 2021-12-20T22:01:33Z

Modules

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


Readme for parse-0.1.1.0

[back to package description]

parse

Haskell, while notorious for its extremely powerful parser combinators library, lacks a quick-and-dirty way to parse simple-formatted strings in a one-liner. This is especially frustrating for Advent of Code, where the input to some puzzles, which is in other languages fairly painless to parse, requires some overly convoluted, hacky and noncompact solution.

Envious of Python's parse package, I decided to write my own, very stripped down version, in Haskell. This package provides a way to create a "template" for how strings should look, and parse them accodringly. While inspired by Python format strings, the content of each field is returned as a string. If you so desire, you can read them manually.

Examples:

>>> parse "It's {}, I love it!" "It's spam, I love it!" :: String
"spam"

>>> parse "{} + {} = {}" "3.1415926535 + 2.7182818284 = 5.8598744819" :: (String, String, String)
("3.1415926535","2.7182818284","5.8598744819")

You can also return the parsed fields as a list, instead of a tuple (for long lists, or ones you intend to use as a Functor.)

>>> map read $ parseList "{}, {}, {}, {}, {}, {}, {}, {}, {}, {}" "2, 3, 5, 7, 11, 13, 17, 19, 23, 29" :: [Int]
[2,3,5,7,11,13,17,19,23,29]

Safe versions of each function are provided alongside them.

It should be noted that this package lacks most of the features supplied by parse, instead providing only basic parsing functionality. This may or may not change in the future.

Also, the parsing method used is slow. It is not intended for parsing large quantities of data.