Module type Param.S
Command.Param is intended to be used with the [%map_open] syntax defined in ppx_let, like so:
let command =
Command.basic ~summary:"..."
[%map_open
let count = anon ("COUNT" %: int)
and port = flag "port" (optional int) ~doc:"N listen on this port"
and person = person_param
in
(* ... Command-line validation code, if any, goes here ... *)
fun () ->
(* The body of the command *)
do_stuff count port person
]One can also use [%map_open] to define composite command line parameters, like person_param in the previous snippet:
type person = { name : string; age : int }
let person_param : person Command.Param.t =
[%map_open
let name = flag "name" (required string) ~doc:"X name of the person"
and age = flag "age" (required int) ~doc:"N how many years old"
in
{name; age}
]The right-hand sides of [%map_open] definitions have Command.Param in scope.
Alternatively, you can say:
let open Foo.Let_syntax in
[%map_open
let x ...
]if Foo follows the same conventions as Command.Param.
See example/command/main.ml for more examples.
include Core_kernel__.Import.Applicative.S with type 'a t := 'a t
val apply : ('a -> 'b) t -> 'a t -> 'b tval map2 : 'a t -> 'b t -> f:('a -> 'b -> 'c) -> 'c tval map3 : 'a t -> 'b t -> 'c t -> f:('a -> 'b -> 'c -> 'd) -> 'd tval all : 'a t list -> 'a list tval all_unit : unit t list -> unit tval all_ignore : unit t list -> unit t
module Applicative_infix : Base__.Applicative_intf.Applicative_infix with type 'a t := 'a tVarious internal values
val help : Core_kernel__.Import.string Core_kernel.Lazy.t tThe help text for the command.
val path : Core_kernel__.Import.string Core_kernel__.Import.list tThe subcommand path of the command.
val args : Core_kernel__.Import.string Core_kernel__.Import.list tThe arguments passed to the command.
val flag : ?aliases:Core_kernel__.Import.string Core_kernel__.Import.list -> ?full_flag_required:Core_kernel__.Import.unit -> Core_kernel__.Import.string -> 'a Flag.t -> doc:Core_kernel__.Import.string -> 'a tflag name spec ~docspecifies a command that, among other things, takes a flag namednameon its command line.docindicates the meaning of the flag.All flags must have a dash at the beginning of the name. If
nameis not prefixed by "-", it will be normalized to"-" ^ name.Unless
full_flag_requiredis used, one doesn't have to passnameexactly on the command line, but only an unambiguous prefix ofname(i.e., a prefix which is not a prefix of any other flag's name).NOTE: the
docfor a flag which takes an argument should be of the formarg_name ^ " " ^ descriptionwherearg_namedescribes the argument anddescriptiondescribes the meaning of the flag.NOTE: flag names (including aliases) containing underscores will be rejected. Use dashes instead.
NOTE: "-" by itself is an invalid flag name and will be rejected.
val flag_optional_with_default_doc : ?aliases:Core_kernel__.Import.string Core_kernel__.Import.list -> ?full_flag_required:Core_kernel__.Import.unit -> Core_kernel__.Import.string -> 'a Arg_type.t -> ('a -> Core_kernel.Sexp.t) -> default:'a -> doc:Core_kernel__.Import.string -> 'a tflag_optional_with_default_doc name arg_type sexp_of_default ~default ~docis a shortcut forflag, where:- The
Flag.tisoptional_with_default default arg_type - The
docis passed through with an explanation of what the default value appended.
- The
val anon : 'a Anons.t -> 'a tanon specspecifies a command that, among other things, takes the anonymous arguments specified byspec.
val choose_one : 'a Core_kernel__.Import.option t Core_kernel__.Import.list -> if_nothing_chosen:[ `Default_to of 'a | `Raise ] -> 'a tchoose_one clauses ~if_nothing_chosenexpresses a sum type. It raises if more than one ofclausesisSome _. Whenif_nothing_chosen = `Raise, it also raises if none ofclausesisSome _.