sig
  type spec =
      Unit of (unit -> unit)
    | Bool of (bool -> unit)
    | Set of bool Pervasives.ref
    | Clear of bool Pervasives.ref
    | String of (string -> unit)
    | Set_string of string Pervasives.ref
    | Int of (int -> unit)
    | Set_int of int Pervasives.ref
    | Float of (float -> unit)
    | Set_float of float Pervasives.ref
    | Tuple of Arg.spec list
    | Symbol of string list * (string -> unit)
    | Rest of (string -> unit)
  type key = string
  type doc = string
  type usage_msg = string
  type anon_fun = string -> unit
  val parse :
    (Arg.key * Arg.spec * Arg.doc) list ->
    Arg.anon_fun -> Arg.usage_msg -> unit
  val parse_dynamic :
    (string * Arg.spec * string) list Pervasives.ref ->
    Arg.anon_fun -> string -> unit
  val parse_argv :
    ?current:int Pervasives.ref ->
    string array ->
    (Arg.key * Arg.spec * Arg.doc) list ->
    Arg.anon_fun -> Arg.usage_msg -> unit
  val parse_argv_dynamic :
    ?current:int Pervasives.ref ->
    string array ->
    (string * Arg.spec * string) list Pervasives.ref ->
    Arg.anon_fun -> string -> unit
  exception Help of string
  exception Bad of string
  val usage : (Arg.key * Arg.spec * Arg.doc) list -> Arg.usage_msg -> unit
  val usage_string :
    (Arg.key * Arg.spec * Arg.doc) list -> Arg.usage_msg -> string
  val align :
    (Arg.key * Arg.spec * Arg.doc) list ->
    (Arg.key * Arg.spec * Arg.doc) list
  val current : int Pervasives.ref
end