File: README.md

package info (click to toggle)
haskell-config-value 0.8.3-4
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid, trixie
  • size: 164 kB
  • sloc: haskell: 686; yacc: 197; makefile: 2
file content (75 lines) | stat: -rw-r--r-- 2,219 bytes parent folder | download | duplicates (2)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# config-value

[![Hackage](https://img.shields.io/hackage/v/config-value.svg)](https://hackage.haskell.org/package/config-value) [![Build Status](https://api.travis-ci.com/glguy/config-value.svg)](http://travis-ci.com/glguy/config-value)

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](https://github.com/glguy/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](https://glguy.net/config-demo/).

Example
-------
```
-- Line comments until newline
layout:
  based:
    configuration:
      {} -- empty section

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

    sections:
     "glguy"

    {- 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

lists:
   * 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"
```

Format
------

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.