sig
  module Flag :
    sig
      module Type :
        sig
          type 'a t
          val create : (string -> 'a) -> 'Command.Flag.Type.t
          val bool : bool Command.Flag.Type.t
          val int : int Command.Flag.Type.t
          val float : float Command.Flag.Type.t
        end
      module Action :
        sig
          type 'a t
          val noarg : ('-> unit) -> 'Command.Flag.Action.t
          val arg : ('-> string -> unit) -> 'Command.Flag.Action.t
          val rest : ('-> string list -> unit) -> 'Command.Flag.Action.t
          val of_type :
            'Command.Flag.Type.t ->
            ('-> '-> unit) -> 'Command.Flag.Action.t
        end
      type 'a t = {
        name : string;
        spec : 'Command.Flag.Action.t;
        doc : string;
      }
    end
  type t
  val create :
    summary:string ->
    usage_arg:string ->
    init:(unit -> 'a) ->
    flags:'Command.Flag.t list ->
    anon:('-> string list -> unit) ->
    final:('-> (unit -> string) -> 'b) -> main:('-> int) -> Command.t
  val group : summary:string -> (string * Command.t) list -> Command.t
  val run : ?argv:string list -> Command.t -> hash_bang_expand:bool -> int
  module Tab_completion :
    sig
      val write_script : Command.t -> argv0:string -> dest:string -> unit
    end
  module Version :
    sig val command : version:string -> build_info:string -> Command.t end
end