sig
  module Spec :
    sig
      type ('main_in, 'main_out) t =
          ('main_in, 'main_out) Core_command.Spec.t
      val ( ++ ) : ('m1, 'm2) t -> ('m2, 'm3) t -> ('m1, 'm3) t
      val const : '-> ('-> 'm, 'm) t
      val step : ('m1 -> 'm2) -> ('m1, 'm2) t
      type 'a arg_type = 'Core_command.Spec.arg_type
      val arg_type :
        ?complete:(Hmap.t -> part:string -> string list) ->
        ?key:'Hmap.Key.t -> (string -> 'a) -> 'a arg_type
      val string : string arg_type
      val int : int arg_type
      val float : float arg_type
      val bool : bool arg_type
      val date : Core.Std.Date.t arg_type
      val time_span : Core.Std.Time.Span.t arg_type
      val file : string arg_type
      type 'a flag = 'Core_command.Spec.flag
      val flag :
        ?aliases:string list ->
        string -> 'a flag -> doc:string -> ('-> 'm, 'm) t
      val required : 'a arg_type -> 'a flag
      val optional : 'a arg_type -> 'a option flag
      val optional_with_default : '-> 'a arg_type -> 'a flag
      val listed : 'a arg_type -> 'a list flag
      val no_arg : bool flag
      val no_arg_register : key:unit Hmap.Key.t -> bool flag
      val escape : string list option flag
      type 'a anons = 'Core_command.Spec.anons
      val anon : 'a anons -> ('-> 'm, 'm) t
      val ( %: ) : string -> 'a arg_type -> 'a anons
      val sequence : string -> 'a arg_type -> 'a list anons
      val maybe : 'a anons -> 'a option anons
      val maybe_with_default : '-> 'a anons -> 'a anons
      val t2 : 'a anons -> 'b anons -> ('a * 'b) anons
      val t3 : 'a anons -> 'b anons -> 'c anons -> ('a * 'b * 'c) anons
      val t4 :
        'a anons ->
        'b anons -> 'c anons -> 'd anons -> ('a * 'b * 'c * 'd) anons
      val help : (string Lazy.t -> 'm, 'm) t
      val path : unit -> (string list -> 'm, 'm) t
      val args : (string list -> 'm, 'm) t
      val ad_hoc : usage_arg:string -> string list anons
    end
  type t = Core_command.t
  val basic :
    summary:string ->
    ?readme:(unit -> string) -> ('main, unit) Spec.t -> 'main -> t
  val group :
    summary:string -> ?readme:(unit -> string) -> (string * t) list -> t
  val run :
    ?version:string -> ?build_info:string -> ?argv:string list -> t -> unit
  module Deprecated :
    sig
      module Spec :
        sig
          val no_arg : hook:(unit -> unit) -> bool Spec.flag
          val escape :
            hook:(string list -> unit) -> string list option Spec.flag
        end
      val summary : t -> string
      val help_recursive :
        cmd:string ->
        with_flags:bool ->
        expand_dots:bool -> t -> string -> (string * string) list
      val run :
        t ->
        cmd:string ->
        args:string list ->
        is_help:bool ->
        is_help_rec:bool ->
        is_help_rec_flags:bool -> is_expand_dots:bool -> unit
      val get_flag_names : t -> string list
    end
  val ounit_tests : unit -> OUnit.test
end