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