I’m currently learning Haskell by building a small project and i’d like to parse a configuration file.
Is there a way to have haskell .hs
source code files as configuration files and if not, what are some good libraries for common file types like yaml, toml, ini that don’t have a lot of dependencies? Also, it would be helpful if anyone could suggest resources learn more on parsing.
To parse ini
files I used (and was happy with) config-ini.
For general parsing, megaparsec is a good, well documented, actively maintained choice.
For small projects configurator might also work decently.
I use toml-parser for TOML. And dhall is relatively unique to the Haskell ecosystem but IMO it fulfills its goal of being a better YAML.
I don’t know of any good way to have .hs
as configuration files.
The computer science literature on parsing is vast, though parser combinators less well-documented. Perhaps this?
Relatively unique to Haskell is monadic parser/lexer generators, I know the Happy user guide has a little.
I’d suggest dhall. It’s not exactly Haskell, but it’s the nearest configuration language to it. The configuration loading code would be as simple as with aeson
.
I would recommend using tomland for TOML since it supports the latest TOML specification, and it’s also quite fast. In all my projects where I need a static configuration, I’m using the TOML format since it’s much simpler and cleaner than YAML. I didn’t have a case where I need dhall
yet, but it can be useful if your configuration can be boilerplate-heavy.
One benefit of Dhall is that you can use its TH function makeHaskellTypes
to automatically create the Haskell data types associated with the Dhall config. Here’s an example: Haskell part, and the Dhall part.
While this tread is a bit old, it’s worth mentioning https://github.com/NorfairKing/yamlparse-applicative as another alternative. I find it is really nice when working with 12-factor style projects that could use ENV variables, config files, and/or cli params. When in that situation, you generally want consistency and some nice-haves like auto-generated documentation of the config file and cli.
I think Dyre is the thing. I have not tried it though.