sig
  type parameter_placement_short =
      [ `Catenated | `CatenatedOrSeparated | `EqualitySign | `Separated ]
  type parameter_placement_long = [ `EqualitySign | `Separated ]
  module type Customization =
    sig
      val allow_long_start_with_single_dash : bool
      val default_long_prefix : string
      val allow_contracted_shorts : bool
      val parameter_placement_short : CmdlineArgs.parameter_placement_short
      val parameter_placement_long : CmdlineArgs.parameter_placement_long
      val enforce_single_byte_shorts : bool
    end
  module type S =
    sig
      val quote : string -> string
      exception Error of string
      val error : string list -> 'a
      exception BadDefinitions of string
      type importance = CmdlineArgsBase.importance = Normal | Unimportant
      type 'a meaning = 'CmdlineArgsMeaning.meaning
      type +'a description
      val opt :
        'CmdlineArgs.S.meaning ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgs.S.importance ->
        string -> 'CmdlineArgs.S.description
      type traditional = Help | Version | Manual of [ `Nroff ]
      val traditional :
        CmdlineArgs.S.traditional CmdlineArgs.S.description list
      val traditional_enhanced :
        CmdlineArgs.S.traditional CmdlineArgs.S.description list
      module Summary :
        sig type section type t = CmdlineArgs.S.Summary.section list end
      val summary :
        string ->
        'CmdlineArgs.S.description list -> CmdlineArgs.S.Summary.section
      module PlainText :
        sig
          val help_table :
            CmdlineArgs.S.Summary.section ->
            (string * (string * string * string) list) *
            [> `Complete | `Incomplete ]
          val format_help : CmdlineArgs.S.Summary.section list -> string
        end
      module Nroff :
        sig
          val format_options :
            CmdlineArgs.S.Summary.section list -> HSimpleDoc.item list
          val simple_usage_synopsis_of_string :
            string list -> HSimpleDoc.text list
          val format_manual :
            ?manpage_section:string ->
            (string * string list) list ->
            HSimpleDoc.text list ->
            string -> CmdlineArgs.S.Summary.section list -> string
        end
      val simple_help_string :
        HSimpleDoc.text list -> CmdlineArgs.S.Summary.section list -> string
      val parse_Bool : string -> bool
      val parse_Int : string -> int
      val parse_Float : string -> float
      val parse_RawPath : string -> HPath.t
      val parse_Path : string -> HPath.t
      val parse_String : '-> 'a
      val parse_Symbol : string list -> string -> string
      val materialize_pure : 'CmdlineArgs.S.meaning -> string -> 'a
      type parsed
      val empty_parsed : CmdlineArgs.S.parsed
      val join_parsed :
        CmdlineArgs.S.parsed -> CmdlineArgs.S.parsed -> CmdlineArgs.S.parsed
      val parse :
        CmdlineArgs.S.Summary.section list ->
        string list -> CmdlineArgs.S.parsed
      val recognize :
        'CmdlineArgs.S.description list ->
        CmdlineArgs.S.parsed -> 'a list * CmdlineArgs.S.parsed
      val fold :
        ('-> 'a) CmdlineArgs.S.description list ->
        '-> CmdlineArgs.S.parsed -> 'a * CmdlineArgs.S.parsed
      val take_pure :
        CmdlineArgs.S.parsed -> string list * CmdlineArgs.S.parsed
      val final_take_pure : CmdlineArgs.S.parsed -> string list
      val exec_traditional :
        ?manual_sections:(string * string list) list ->
        HSimpleDoc.text list ->
        CmdlineArgs.S.Summary.section list ->
        ?help_string:string ->
        string -> CmdlineArgs.S.traditional list -> unit
      val cmdline_args : string list
      val parse_recognize_exc :
        ?args:string list ->
        ?traditional:CmdlineArgs.S.traditional CmdlineArgs.S.description list ->
        ?manual_sections:(string * string list) list ->
        string ->
        ?usage_synopsis:string list ->
        ?formatted_usage_synopsis:HSimpleDoc.text list ->
        'CmdlineArgs.S.description list -> 'a list * string list
      val parse_recognize :
        ?args:string list ->
        ?traditional:CmdlineArgs.S.traditional CmdlineArgs.S.description list ->
        ?manual_sections:(string * string list) list ->
        string ->
        ?usage_synopsis:string list ->
        ?formatted_usage_synopsis:HSimpleDoc.text list ->
        'CmdlineArgs.S.description list -> 'a list * string list
      val parse_fold_exc :
        ?args:string list ->
        ?traditional:CmdlineArgs.S.traditional CmdlineArgs.S.description list ->
        ?manual_sections:(string * string list) list ->
        string ->
        ?usage_synopsis:string list ->
        ?formatted_usage_synopsis:HSimpleDoc.text list ->
        ('-> 'a) CmdlineArgs.S.description list -> '-> 'a * string list
      val parse_fold :
        ?args:string list ->
        ?traditional:CmdlineArgs.S.traditional CmdlineArgs.S.description list ->
        ?manual_sections:(string * string list) list ->
        string ->
        ?usage_synopsis:string list ->
        ?formatted_usage_synopsis:HSimpleDoc.text list ->
        ('-> 'a) CmdlineArgs.S.description list -> '-> 'a * string list
      val take_flag_out : 'a list -> '-> bool * 'a list
      type 'a clash_policy =
          ForbidClash of string
        | Override
        | SolveClash of ('a list -> 'a)
      val take_values_out : 'a list -> ('-> 'b option) -> 'b list * 'a list
      val take_value_out :
        'CmdlineArgs.S.clash_policy ->
        'b list -> ('-> 'a option) -> 'a option * 'b list
      val default : '-> ('-> '-> 'a option * 'd) -> '-> '-> 'a * 'd
      val last : ('-> '-> 'c * 'd list) -> '-> '-> 'c
      val oBool :
        (bool -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oBoolOpt :
        (bool option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetBool :
        bool Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetBoolOpt :
        bool option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyBool :
        (bool -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyBoolOpt :
        (bool option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oInt :
        (int -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oIntOpt :
        (int option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetInt :
        int Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetIntOpt :
        int option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyInt :
        (int -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyIntOpt :
        (int option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oFloat :
        (float -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oFloatOpt :
        (float option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetFloat :
        float Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetFloatOpt :
        float option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyFloat :
        (float -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyFloatOpt :
        (float option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oRawPath :
        (HPath.t -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oRawPathOpt :
        (HPath.t option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetRawPath :
        HPath.t Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetRawPathOpt :
        HPath.t option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyRawPath :
        (HPath.t -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyRawPathOpt :
        (HPath.t option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oPath :
        (HPath.t -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oPathOpt :
        (HPath.t option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetPath :
        HPath.t Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetPathOpt :
        HPath.t option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyPath :
        (HPath.t -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyPathOpt :
        (HPath.t option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oRealPath :
        (HPath.t -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oRealPathOpt :
        (HPath.t option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetRealPath :
        HPath.t Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetRealPathOpt :
        HPath.t option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyRealPath :
        (HPath.t -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyRealPathOpt :
        (HPath.t option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oString :
        (string -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oStringOpt :
        (string option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetString :
        string Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetStringOpt :
        string option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyString :
        (string -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplyStringOpt :
        (string option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSymbol :
        string list * (string -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSymbolOpt :
        string list * (string option -> 'a) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetSymbol :
        string list * string Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oSetSymbolOpt :
        string list * string option Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplySymbol :
        string list * (string -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oApplySymbolOpt :
        string list * (string option -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        ?label:string -> string -> 'CmdlineArgs.S.description
      val oConst :
        '->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        string -> 'CmdlineArgs.S.description
      val oSetTrue :
        bool Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        string -> 'CmdlineArgs.S.description
      val oSetFalse :
        bool Pervasives.ref ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        string -> 'CmdlineArgs.S.description
      val oApplyUnit :
        (unit -> unit) ->
        string ->
        ?short:string ->
        ?importance:CmdlineArgsBase.importance ->
        string -> 'CmdlineArgs.S.description
    end
  module Make : functor (Customs : Customization-> S
  module MoreLikeGNU : S
  module MoreLikeStdlibArg : S
end