content: module Util.Args.ArgDescr ( DefaultValue(..)
                            , ArgDescr(..)
                            , KnownArgs
                            ) where
  
  -- default value for cli option
  data DefaultValue = ConstValue String -- explicit default value
                    | DynValue String   -- human readable description of a process
                                        -- that will provide default value
  
  -- cli option description
  data ArgDescr =
        -- switch
        SwitchDescr { argName  :: String     -- switch name (e.g. 'verbose' for --verbose)
                    , helpMsg  :: String     -- human readable description of this switch
                    , shortOpt :: Maybe Char -- optional short version for this switch
                                            -- (e.g. 'v' for '-v'
                                            -- as a shortcut for '--verbose')
                    }
      -- option with a value
    | ValArg { argName      :: String -- option name (e.g. 'key' for '--key=value')
             , valTemplate  :: String -- help template for value (e.g. 'PATH' for --binary=PATH)
             , defaultValue :: DefaultValue -- default value
             , helpMsg      :: String -- human readable description of this switch
             }
  
  type KnownArgs = [ArgDescr]
  