diff options
author | defanor <defanor@uberspace.net> | 2016-11-25 06:35:55 +0300 |
---|---|---|
committer | defanor <defanor@uberspace.net> | 2016-11-25 06:35:55 +0300 |
commit | 4beea4536a36322e15665de74c96926f0cf5fe7b (patch) | |
tree | 3fbf95944351b0ceaf4c925715ee9bec4069fb7d /README.md |
Initial commit
Diffstat (limited to 'README.md')
-rw-r--r-- | README.md | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/README.md b/README.md new file mode 100644 index 0000000..63db06d --- /dev/null +++ b/README.md @@ -0,0 +1,51 @@ +# Coalpit + +Coalpit is a library for building command-line program +interfaces. They are like command-line user interfaces, but for +programs. + +Given a type, it derives instances to print and parse it as +command-line arguments. + +The goal is to +faciliate +[the KISS principle](https://en.wikipedia.org/wiki/KISS_principle) +preservation for interfaces between system components in certain +(rather [unixy](https://en.wikipedia.org/wiki/Unix_philosophy)) +architectures. Described in more detail in +the +[command-line program interface](https://defanor.uberspace.net/notes/command-line-program-interface.html) note. + +Not production-ready yet, merely a prototype. + + +## Example + +There is an example in `Example.hs`, but here are some bits: + +```haskell +data Y = Foo Bool Int + | Bar Int + | Baz +data X = X String (Maybe Int) (Maybe [Int]) Y Y String +$(deriveArgs ''Y) +$(deriveArgs ''X) +``` + +`toArgs` serializes data into arguments, and `fromArgs` deserializes +it: `X "test" Nothing (Just [1,2,3]) (Foo True 1) Baz "end"` ↔ `x +"test" n j 1,2,3 foo t 1 baz "end"`. + + +## TODO + +What it currently lacks, but what should be done, roughly in that +order: + +* Proper parsing: use optparse-applicative, Parsec, or a custom + parser, but something with error handling and more flexible. +* Named arguments (via records), not just positional ones. +* Optional arguments: once the named ones will be there, `Maybe a` + could be handled nicer. +* Help messages. +* Documentation. |