From c84dbc16bbf683661e8323c68326ee04c8daf2fc Mon Sep 17 00:00:00 2001 From: defanor Date: Sat, 2 Dec 2017 06:49:58 +0300 Subject: Use GHC.Generics instead of TH It's considerably cleaner and simpler with GHC.Generics. Megaparsec is also used now. --- README.md | 40 ++++++---------------------------------- 1 file changed, 6 insertions(+), 34 deletions(-) (limited to 'README.md') diff --git a/README.md b/README.md index 63db06d..f31d8c5 100644 --- a/README.md +++ b/README.md @@ -5,7 +5,11 @@ 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. +command-line arguments. The resulting serialization wouldn't be as +nice as that of +e.g. +[optparse-generic](https://hackage.haskell.org/package/optparse-generic), +but the aim here is to handle arbitrary types. The goal is to faciliate @@ -16,36 +20,4 @@ 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. +Far from production-ready yet, merely a prototype. -- cgit v1.2.3