{- | Description : Command-line options and DSV parsing and printing Maintainer : defanor Stability : unstable Portability : non-portable (uses GHC extensions) Coalpit is a library for building command-line interfaces: the goal is to get interfaces quickly and easily, while keeping them language-agnostic and more user- and shell scripting-friendly than JSON and similar formats. == Example @ \{\-\# LANGUAGE DeriveGeneric, DeriveAnyClass \#\-\} import GHC.Generics import Data.Proxy import System.Environment import Coalpit data Foo = Foo { bar :: Maybe Int , baz :: String } deriving (Show, Generic, 'Coalpit') main :: IO () main = do args <- getArgs case 'fromArgs' 'defOpt' args of Left err -> do putStrLn err putStrLn $ "Usage: " ++ 'usageString' 'defOpt' (Proxy :: Proxy Foo) Right x -> do print (x :: Foo) print $ 'toArgs' 'defOpt' x putStrLn $ showDSV defOpt x print ('readDSV' 'defOpt' $ 'showDSV' 'defOpt' x :: Either String Foo) @ Then, in a shell: > $ ./Example 'a string' > Foo {bar = Nothing, baz = "a string"} > ["a string"] > "a string" > Right (Foo {bar = Nothing, baz = "a string"}) > $ ./Example --bar 42 'a string' > Foo {bar = Just 42, baz = "a string"} > ["--bar","42","a string"] > --bar 42 "a string" > Right (Foo {bar = Just 42, baz = "a string"}) > $ ./Example --bar foo > arguments:1:3: > Failed to read: foo > > Usage: [--bar INT] STRING -} module Coalpit ( module Coalpit.Core , module Coalpit.DSV ) where import Coalpit.Core import Coalpit.DSV