Skip to content

Commit

Permalink
Add readme
Browse files Browse the repository at this point in the history
  • Loading branch information
Ben Hamlin committed Nov 13, 2017
1 parent 8413268 commit af555c5
Showing 1 changed file with 52 additions and 0 deletions.
52 changes: 52 additions & 0 deletions README.md
Original file line number Diff line number Diff line change
@@ -0,0 +1,52 @@
Text.ConfigParser
=================

This is yet another entry in Haskell's enourmous collection of config-file
parsing libraries. It lacks many of the bells and whistles of other config-file
parsing libraries, such as hierarchical sections and on-the-fly reloading. On
the other hand, it has a combination of features I was unable to find in other
libraries:
* Keys and values are parsed with configurable parsec parsers, resulting in
flexible syntax and pretty error messages.
* Custom parsers can be created with parsec to handle values of any type.
* Keys that aren't explicitly handled result in parse errors.

If you don't need all of these features, there are probably better libraries out
there for you. If you're free to use its idiosyncratic file format, the
config-value library, in particular, is excelent.

By default, this library parses flat config like the following:
```
a_string = "blah, blah, blah\nmore blah"
a_number = 9001
a_list = [1,2,3,4,5]
# This is a comment
```

If you wanted to parse the above file, saved as @./config.txt@, you might do so
as follows:
```hs
import Text.ConfigParser

cp :: ConfigParser (Maybe String, Maybe Integer, [Integer])
cp = configParser (Nothing, Nothing, [])
[ ConfigOption
{ key = "a_string"
, parser = string
, action = \s (_,n,ns) -> (Just s, n, ns)
}
, ConfigOption
{ key = "a_number"
, parser = integer
, action = \n (s,_,ns) -> (s, Just n, ns)
}
, ConfigOption
{ key = "a_list"
, parser = list integer
, action = \ns (s,n,_) -> (s, n, ns)
}
]

main :: IO ()
main = parseFromFile cp "./config.txt" >>= print
```

0 comments on commit af555c5

Please sign in to comment.