config-value: Simple, layout-based value language similar to YAML or JSON

[ language, library, mit ] [ Propose Tags ]

This package implements a language similar to YAML or JSON but with fewer special cases and fewer dependencies. It emphasizes layout structure for sections and lists, and requires quotes around strings.

[Skip to Readme]


Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1, 0.1.1, 0.2, 0.3, 0.4,,, 0.5, 0.5.1, 0.6, 0.6.1, 0.6.2,, 0.6.3,,,, 0.8, 0.8.1, 0.8.2,, 0.8.3 (info)
Change log
Dependencies array (>=0.4 && <0.6), base (>=4.8 && <4.18), containers (>=0.5 && <0.7), pretty (>= && <1.2), text (>= && <2.1) [details]
License MIT
Copyright 2015-2016,2019 Eric Mertens
Author Eric Mertens
Category Language
Home page
Bug tracker
Source repo head: git clone git://
Uploaded by EricMertens at 2022-08-10T22:27:43Z
Distributions Arch:0.8.3, Debian:, NixOS:0.8.3
Reverse Dependencies 5 direct, 9 indirect [details]
Downloads 16593 total (132 in the last 30 days)
Rating 2.5 (votes: 3) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-08-11 [all 1 reports]

Readme for config-value-0.8.3

[back to package description]


Hackage Build Status

This package implements a simple, layout-based value definition language used for supplying configuration values to various applications.

Before starting to use config-value, you probably want to read the documentation for config-schema to see the user-friendly way to wrap this library.

Live Demo

The config-value and config-schema packages are available in a live demo.


-- Line comments until newline
      {} -- empty section

    inline-maps: {key1: value1, key2: value2}


    {- Block comments
       {- nested comments -}
       "O'caml style {- strings in comments"
       so you can comment out otherwise valid
       portions of your config
    atoms:       yes

    decimal:     -1234
    hexadecimal: 0x1234
    octal:       0o1234
    binary:      0b1010

    floats:      [1e2, 0x3p-5, 24.48]
    underscores: 1_000_000

   * sections: in-lists
     next-section: still-in-list
   * [ "inline", "lists" ]
   * * "nestable"
     * "layout"
     * "lists"
   * 3

unicode: "standard Haskell format strings (1 ≤ 2)x2228(2 ≤ 3)"

multiline: "haskell style\
           \string gaps"


The language supports: Strings, Atoms, Integers, Lists, Nested Sections.

Sections are layout based. The contents of a section must be indented further than the section heading. The whitespace between a section heading and its colon is not significant. Section names must start with a letter and may contain letters, numbers, dashes (-), underscores (_), and periods (.).

Lists are either layout based with * prefixes or inline surrounded by [ and ] delimited by ,

Strings are surrounded by " and use Haskell-style escapes.

Numbers support decimal, hexadecimal (0x), octal (0o), and binary (0b).

Atoms follow the same lexical rule as section heading.