sig
  type 'a param
  val const : '-> 'Command.Spec.param
  val map : 'Command.Spec.param -> f:('-> 'b) -> 'Command.Spec.param
  val help : string Core_kernel.Std.Lazy.t Command.Spec.param
  val path : string list Command.Spec.param
  val args : string list Command.Spec.param
  type ('main_in, 'main_out) t
  val empty : ('m, 'm) Command.Spec.t
  val ( ++ ) :
    ('m1, 'm2) Command.Spec.t ->
    ('m2, 'm3) Command.Spec.t -> ('m1, 'm3) Command.Spec.t
  val ( +> ) :
    ('m1, '-> 'm2) Command.Spec.t ->
    'Command.Spec.param -> ('m1, 'm2) Command.Spec.t
  val ( +< ) :
    ('m1, 'm2) Command.Spec.t ->
    'Command.Spec.param -> ('-> 'm1, 'm2) Command.Spec.t
  val step : ('m1 -> 'm2) -> ('m1, 'm2) Command.Spec.t
  val wrap :
    (run:('m1 -> 'r1) -> main:'m2 -> 'r2) ->
    ('m1, 'r1) Command.Spec.t -> ('m2, 'r2) Command.Spec.t
  module Arg_type :
    sig
      type 'a t
      val create :
        ?complete:(Core_kernel.Std.Univ_map.t -> part:string -> string list) ->
        ?key:'Core_kernel.Std.Univ_map.Multi.Key.t ->
        (string -> 'a) -> 'Command.Spec.Arg_type.t
      val of_map :
        ?key:'Core_kernel.Std.Univ_map.Multi.Key.t ->
        'Core_kernel.Std.String.Map.t -> 'Command.Spec.Arg_type.t
      val of_alist_exn :
        ?key:'Core_kernel.Std.Univ_map.Multi.Key.t ->
        (string * 'a) list -> 'Command.Spec.Arg_type.t
    end
  val string : string Command.Spec.Arg_type.t
  val int : int Command.Spec.Arg_type.t
  val float : float Command.Spec.Arg_type.t
  val bool : bool Command.Spec.Arg_type.t
  val date : Date.t Command.Spec.Arg_type.t
  val time_span : Span.t Command.Spec.Arg_type.t
  val file : string Command.Spec.Arg_type.t
  type 'a flag
  val flag :
    ?aliases:string list ->
    string -> 'Command.Spec.flag -> doc:string -> 'Command.Spec.param
  val map_flag : 'Command.Spec.flag -> f:('-> 'b) -> 'Command.Spec.flag
  val required : 'Command.Spec.Arg_type.t -> 'Command.Spec.flag
  val optional : 'Command.Spec.Arg_type.t -> 'a option Command.Spec.flag
  val optional_with_default :
    '-> 'Command.Spec.Arg_type.t -> 'Command.Spec.flag
  val listed : 'Command.Spec.Arg_type.t -> 'a list Command.Spec.flag
  val no_arg : bool Command.Spec.flag
  val no_arg_register :
    key:'Core_kernel.Std.Univ_map.With_default.Key.t ->
    value:'-> bool Command.Spec.flag
  val no_arg_abort :
    exit:(unit -> Core_kernel.Std.never_returns) -> unit Command.Spec.flag
  val escape : string list option Command.Spec.flag
  val flags_of_args_exn :
    Core_kernel.Std.Arg.t list -> ('a, 'a) Command.Spec.t
  type 'a anons
  val anon : 'Command.Spec.anons -> 'Command.Spec.param
  val map_anons :
    'Command.Spec.anons -> f:('-> 'b) -> 'Command.Spec.anons
  val ( %: ) : string -> 'Command.Spec.Arg_type.t -> 'Command.Spec.anons
  val sequence : 'Command.Spec.anons -> 'a list Command.Spec.anons
  val maybe : 'Command.Spec.anons -> 'a option Command.Spec.anons
  val maybe_with_default :
    '-> 'Command.Spec.anons -> 'Command.Spec.anons
  val t2 :
    'Command.Spec.anons ->
    'Command.Spec.anons -> ('a * 'b) Command.Spec.anons
  val t3 :
    'Command.Spec.anons ->
    'Command.Spec.anons ->
    'Command.Spec.anons -> ('a * 'b * 'c) Command.Spec.anons
  val t4 :
    'Command.Spec.anons ->
    'Command.Spec.anons ->
    'Command.Spec.anons ->
    'Command.Spec.anons -> ('a * 'b * 'c * 'd) Command.Spec.anons
end