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