sig
  type 'a setter = No_arg of '| Arg of (string -> 'a)
  type ('a, 'flag) t
  val flag : ('a, 'flag) Command.Flags_ext.t -> 'flag
  val get : ('a, 'b) Command.Flags_ext.t -> 'a
  val is_set : ('a, 'b) Command.Flags_ext.t -> bool
  val create_optional :
    name:string ->
    doc:string ->
    'Command.Flags_ext.setter ->
    ('a option, unit Command.Flag.t) Command.Flags_ext.t
  val create :
    ?default:'a * ('-> string) ->
    name:string ->
    doc:string ->
    'Command.Flags_ext.setter ->
    ('a, unit Command.Flag.t) Command.Flags_ext.t
  val create_many :
    ?at_least_one:bool ->
    name:string ->
    doc:string ->
    'Command.Flags_ext.setter ->
    ('a list, unit Command.Flag.t) Command.Flags_ext.t
  val create_choice :
    ?default:'a * ('-> string) ->
    (string * string * 'Command.Flags_ext.setter) list ->
    ('a, unit Command.Flag.t list) Command.Flags_ext.t
  val create_choice_optional :
    (string * string * 'Command.Flags_ext.setter) list ->
    ('a option, unit Command.Flag.t list) Command.Flags_ext.t
  val create_set :
    name:string ->
    doc:string -> (bool, unit Command.Flag.t) Command.Flags_ext.t
  val create_rest :
    ?name:string ->
    doc:string ->
    unit -> (string list option, unit Command.Flag.t) Command.Flags_ext.t
end