sig
  type ('main_in, 'main_out) t
  val ( ++ ) :
    ('m1, 'm2) Core_command.Spec.t ->
    ('m2, 'm3) Core_command.Spec.t -> ('m1, 'm3) Core_command.Spec.t
  val const : '-> ('-> 'm, 'm) Core_command.Spec.t
  val step : ('m1 -> 'm2) -> ('m1, 'm2) Core_command.Spec.t
  type 'a arg_type
  val arg_type :
    ?complete:(Hmap.t -> part:string -> string list) ->
    ?key:'Hmap.Key.t -> (string -> 'a) -> 'Core_command.Spec.arg_type
  val string : string Core_command.Spec.arg_type
  val int : int Core_command.Spec.arg_type
  val float : float Core_command.Spec.arg_type
  val bool : bool Core_command.Spec.arg_type
  val date : Core.Std.Date.t Core_command.Spec.arg_type
  val time_span : Core.Std.Time.Span.t Core_command.Spec.arg_type
  val file : string Core_command.Spec.arg_type
  type 'a flag
  val flag :
    ?aliases:string list ->
    string ->
    'Core_command.Spec.flag ->
    doc:string -> ('-> 'm, 'm) Core_command.Spec.t
  val required : 'Core_command.Spec.arg_type -> 'Core_command.Spec.flag
  val optional :
    'Core_command.Spec.arg_type -> 'a option Core_command.Spec.flag
  val optional_with_default :
    '-> 'Core_command.Spec.arg_type -> 'Core_command.Spec.flag
  val listed :
    'Core_command.Spec.arg_type -> 'a list Core_command.Spec.flag
  val no_arg : bool Core_command.Spec.flag
  val no_arg_register : key:unit Hmap.Key.t -> bool Core_command.Spec.flag
  val escape : string list option Core_command.Spec.flag
  type 'a anons
  val anon : 'Core_command.Spec.anons -> ('-> 'm, 'm) Core_command.Spec.t
  val ( %: ) :
    string -> 'Core_command.Spec.arg_type -> 'Core_command.Spec.anons
  val sequence :
    string ->
    'Core_command.Spec.arg_type -> 'a list Core_command.Spec.anons
  val maybe : 'Core_command.Spec.anons -> 'a option Core_command.Spec.anons
  val maybe_with_default :
    '-> 'Core_command.Spec.anons -> 'Core_command.Spec.anons
  val t2 :
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons -> ('a * 'b) Core_command.Spec.anons
  val t3 :
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons -> ('a * 'b * 'c) Core_command.Spec.anons
  val t4 :
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons ->
    'Core_command.Spec.anons -> ('a * 'b * 'c * 'd) Core_command.Spec.anons
  val help : (string Lazy.t -> 'm, 'm) Core_command.Spec.t
  val path : unit -> (string list -> 'm, 'm) Core_command.Spec.t
  val args : (string list -> 'm, 'm) Core_command.Spec.t
  val ad_hoc : usage_arg:string -> string list Core_command.Spec.anons
end