path: root/
diff options
authordefanor <>2017-12-03 15:14:07 +0300
committerdefanor <>2017-12-03 15:33:41 +0300
commit865dca5a7d38fa63aa8d497ab89a3be9ea0e444d (patch)
treef89c0fd81bccd7759e1c7599b56d837d4ead637f /
parent6f2785c9d8bc38c13f5102c085c2fe87d21b8f8a (diff)
Update README and Example.hs
Diffstat (limited to '')
1 files changed, 33 insertions, 15 deletions
diff --git a/ b/
index f941909..e46037d 100644
--- a/
+++ b/
@@ -1,26 +1,44 @@
# Coalpit
-Coalpit is a library for building command-line program
-interfaces. They are like command-line user interfaces, but for
+Coalpit is a library for
+[command-line program interfaces](
+the goal is to get interfaces between programs quickly and easily,
+while keeping them language-agnostic and more user- and shell
+scripting-friendly than JSON and similar formats.
Given a type, it derives instances to print and parse it as
-command-line arguments. The resulting serialization wouldn't be as
+command-line arguments. The resulting deserialization wouldn't be as
nice as that of
-but the aim here is to handle arbitrary types.
-The goal is to
-[the KISS principle](
-preservation for interfaces between system components in certain
-(rather [unixy](
-architectures. Described in more detail in
-[command-line program interface]( note.
+but the aim here is to handle more or less arbitrary types.
Warning: it is currently possible to run into ambiguity by defining a
recursive structure with optional named elements.
-Far from production-ready yet, merely a prototype.
+Not production-ready yet, merely a prototype.
+## Example
+An example is available in `Example.hs`. Given the following Haskell
+Input { something = Nothing
+ , fooBar = Just (Foo (FooArgs { arg1 = 1
+ , arg2 = "a string"}))
+ , fooBar2 = Bar}
+Its serialized version should look like this:
+["--foobar","foo","--arg1","1","--arg2","a string","--foobar2","bar"]
+What would look like this in a shell:
+--foobar foo --arg1 1 --arg2 'a string' --foobar2 bar