Process a list of flags (usually obtained from getArgs/expandArgsAt) with a mode. Returns
Left and an error message if the command line fails to parse, or Right and
the associated value.
Modulecmdargs-0.10.22Haskell2010
System.Console.CmdArgs.Explicit
This module constructs command lines. You may either use the helper functions (flagNone, flagOpt, mode etc.) or construct the type directly. These types are intended to give all the necessary power to the person constructing a command line parser.
For people constructing simpler command line parsers, the module System.Console.CmdArgs.Implicit may be more appropriate.
As an example of a parser:
arguments :: Mode [(String,String)]
arguments = mode "explicit" [] "Explicit sample program" (flagArg (upd "file") "FILE")
[flagOpt "world" ["hello","h"] (upd "world") "WHO" "World argument"
,flagReq ["greeting","g"] (upd "greeting") "MSG" "Greeting to give"
,flagHelpSimple (("help",""):)]
where upd msg x v = Right $ (msg,x):v
And this can be invoked by:
main = do
xs <- processArgs arguments
if ("help","") `elem` xs then
print $ helpText [] HelpFormatDefault arguments
else
print xs
Groups: The Group structure allows flags/modes to be grouped for the purpose of displaying help. When processing command lines, the group structure is ignored.
Modes: The Explicit module allows multiple mode programs by placing additional modes
in modeGroupModes. Every mode is allowed sub-modes, and thus multiple levels of mode
may be created. Given a mode x with sub-modes xs, if the first argument corresponds
to the name of a sub-mode, then that sub-mode will be applied. If not, then the arguments
will be processed by mode x. Consequently, if you wish to force the user to explicitly
enter a mode, simply give sub-modes, and leave modeArgs as Nothing. Alternatively, if
you want one sub-mode to be selected by default, place all it's flags both in the sub-mode
and the outer mode.
Parsing rules: Command lines are parsed as per most GNU programs. Short arguments single
letter flags start with -, longer flags start with --, and everything else is considered
an argument. Anything after -- alone is considered to be an argument. For example:
-f --flag argument1 -- --argument2This command line passes one single letter flag (f), one longer flag (flag) and two arguments
(argument1 and --argument2).
- 11 types
- 1 class
- 31 values
- Packagecmdargs-0.10.22
- Exports43
- LanguageHaskell2010
- LicenceBSD-3-Clause
- SourceExplicit.hs
Running command lines
4 declarationsProcess the flags obtained by getArgs and expandArgsAt with a mode. Displays
an error and exits with failure if the command line fails to parse, or returns
the associated value. Implemented in terms of process. This function makes
use of the following environment variables:
$CMDARGS_COMPLETE- causes the program to produce completions using complete, then exit. Completions are based on the result of getArgs, the index of the current argument is taken from$CMDARGS_COMPLETE(set it to-to complete the last argument), and the index within that argument is taken from$CMDARGS_COMPLETE_POS(if set).$CMDARGS_HELPER/$CMDARGS_HELPER_PROG- uses the helper mechanism for entering command line programs as described in System.Console.CmdArgs.Helper.
Process a list of flags (usually obtained from getArgs and expandArgsAt) with a mode.
Throws an error if the command line fails to parse, or returns
the associated value. Implemeneted in terms of process. This function
does not take account of any environment variables that may be set
(see processArgs).
If you are in IO you will probably get a better user experience by calling processValueIO.
Like processValue but on failure prints to stderr and exits the program.
Constructing command lines
32 declarationsA help message that goes with either a flag or a mode.
Create a list of modes, with a program name, an initial value, some help text and the child modes.
A mode. Do not use the Mode constructor directly, instead use mode to construct the Mode and then record updates. Each mode has three main features:
A list of submodes (modeGroupModes)
A list of flags (modeGroupFlags)
Optionally an unnamed argument (modeArgs)
To produce the help information for a mode, either use helpText or show.
Constructors
ModemodeGroupModes :: Group (Mode a)The available sub-modes
modeNames :: [Name]The names assigned to this mode (for the root mode, this name is used as the program name)
modeValue :: aValue to start with
modeCheck :: a -> Either String aCheck the value reprsented by a mode is correct, after applying all flags
modeReform :: a -> Maybe [String]Given a value, try to generate the input arguments.
modeExpandAt :: BoolmodeHelp :: HelpHelp text
modeHelpSuffix :: [String]A longer help suffix displayed after a mode
modeArgs :: ([Arg a], Maybe (Arg a))The unnamed arguments, a series of arguments, followed optionally by one for all remaining slots
modeGroupFlags :: Group (Flag a)Groups of flags
Like functor, but where the the argument isn't just covariant.
Methods
remap :: (a -> b) -> (b -> (a, a -> b)) -> m a -> m bConvert between two values.
An unnamed argument. Anything not starting with - is considered an argument,
apart from "-" which is considered to be the argument "-", and any arguments
following "--". For example:
programname arg1 -j - --foo arg3 -- -arg4 --arg5=1 arg6Would have the arguments:
["arg1","-","arg3","-arg4","--arg5=1","arg6"]A name, either the name of a flag (--foo) or the name of a mode.
The type of a flag, i.e. --foo=TYPE.
Parse a boolean, accepts as True: true yes on enabled 1.
A group of items (modes or flags). The items are treated as a list, but the group structure is used when displaying the help message.
Constructors
GroupgroupUnnamed :: [a]Normal items.
groupHidden :: [a]Items that are hidden (not displayed in the help message).
groupNamed :: [(Help, [a])]Items that have been grouped, along with a description of each group.
Instances5Functor, Show, Semigroup, Monoid, Packer
Functor GroupDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypeShow a => Show (Group a)Defined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypeSemigroup (Group a)Defined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypeMonoid (Group a)Defined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypePacker a => Packer (Group a)Defined in cmdargs-0.10.22 · System.Console.CmdArgs.Helper
Convert a group into a list.
Convert a list into a group, placing all fields in groupUnnamed.
A flag, consisting of a list of flag names and other information.
Constructors
Extract the modes from a Mode
Extract the flags from a Mode
The FlagInfo type has the following meaning:
FlagReq FlagOpt FlagOptRare/FlagNone
-xfoo -x=foo -x=foo -x -foo
-x foo -x=foo -x foo -x foo
-x=foo -x=foo -x=foo -x=foo
--xx foo --xx=foo --xx foo --xx foo
--xx=foo --xx=foo --xx=foo --xx=fooInstances4Eq, Ord, Show, Packer
Eq FlagInfoDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypeOrd FlagInfoDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypeShow FlagInfoDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.TypePacker FlagInfoDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Helper
Extract the value from inside a FlagOpt or FlagOptRare, or raises an error.
A function to take a string, and a value, and either produce an error message
(Left), or a modified value (Right).
Check that a mode is well formed.
Restricted version of remap where the values are isomorphic.
Create an empty mode specifying only modeValue. All other fields will usually be populated using record updates.
Create a mode with a name, an initial value, some help text, a way of processing arguments and a list of flags.
Create a flag taking no argument value, with a list of flag names, an update function and some help text.
Create a flag taking an optional argument value, with an optional value, a list of flag names, an update function, the type of the argument and some help text.
Create a flag taking a required argument value, with a list of flag names, an update function, the type of the argument and some help text.
Create an argument flag, with an update function and the type of the argument.
Create a boolean flag, with a list of flag names, an update function and some help text.
Create a help flag triggered by -?/--help.
Create a help flag triggered by -?/--help. The user
may optionally modify help by specifying the format, such as:
--help=all - help for all modes
--help=html - help in HTML format
--help=100 - wrap the text at 100 characters
--help=100,one - full text wrapped at 100 charactersCreate a version flag triggered by -V/--version.
Create a version flag triggered by --numeric-version.
Create verbosity flags triggered by -v/--verbose and
-q/--quiet
Displaying help
2 declarationsSpecify the format to output the help.
Constructors
HelpFormatDefaultEquivalent to HelpFormatAll if there is not too much text, otherwise HelpFormatOne.
HelpFormatOneDisplay only the first mode.
HelpFormatAllDisplay all modes.
HelpFormatBashBash completion information
HelpFormatZshZ shell completion information
Instances7Bounded, Enum, Eq, Ord, Read, Show, …
Bounded HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpEnum HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpEq HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpOrd HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpRead HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpShow HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.HelpDefault HelpFormatDefined in cmdargs-0.10.22 · System.Console.CmdArgs.Explicit.Help
Generate a help message from a mode. The first argument is a prefix, which is prepended when not using HelpFormatBash or HelpFormatZsh.
Utilities for working with command lines
5 declarationsExpand @ directives in a list of arguments, usually obtained from getArgs.
As an example, given the file test.txt with the lines hello and world:
expandArgsAt ["@test.txt","!"] == ["hello","world","!"]Any @ directives in the files will be recursively expanded (raising an error
if there is infinite recursion).
To supress @ expansion, pass any @ arguments after --.
Given a string, split into the available arguments. The inverse of joinArgs.
Given a sequence of arguments, join them together in a manner that could be used on
the command line, giving preference to the Windows cmd shell quoting conventions.
For an alternative version, intended for actual running the result in a shell, see "System.Process.showCommandForUser"
How to complete a command line option. The Show instance is suitable for parsing from shell scripts.
Constructors
CompleteValue StringComplete to a particular value
CompleteFile String FilePathComplete to a prefix, and a file
CompleteDir String FilePathComplete to a prefix, and a directory
complete Given a current state, return the set of commands you could type now, in preference order.