sig
  module Manpage :
    sig
      type block =
          [ `I of string * string | `Noblank | `P of string | `S of string ]
      type title = string * int * string * string * string
      type t = Cmdliner.Manpage.title * Cmdliner.Manpage.block list
      val print :
        ?subst:(string -> string) ->
        [ `Groff | `Pager | `Plain ] ->
        Format.formatter -> Cmdliner.Manpage.t -> unit
    end
  module Term :
    sig
      type 'a t
      val pure : '-> 'Cmdliner.Term.t
      val ( $ ) :
        ('-> 'b) Cmdliner.Term.t ->
        'Cmdliner.Term.t -> 'Cmdliner.Term.t
      val app :
        ('-> 'b) Cmdliner.Term.t ->
        'Cmdliner.Term.t -> 'Cmdliner.Term.t
      val ret :
        [ `Error of bool * string
        | `Help of [ `Groff | `Pager | `Plain ] * string option
        | `Ok of 'a ] Cmdliner.Term.t -> 'Cmdliner.Term.t
      val main_name : string Cmdliner.Term.t
      val choice_names : string list Cmdliner.Term.t
      val man_format : [ `Groff | `Pager | `Plain ] Cmdliner.Term.t
      type info
      val info :
        ?sdocs:string ->
        ?man:Cmdliner.Manpage.block list ->
        ?docs:string ->
        ?doc:string -> ?version:string -> string -> Cmdliner.Term.info
      val name : Cmdliner.Term.info -> string
      type 'a result =
          [ `Error of [ `Exn | `Parse | `Term ]
          | `Help
          | `Ok of 'a
          | `Version ]
      val eval :
        ?help:Format.formatter ->
        ?err:Format.formatter ->
        ?catch:bool ->
        ?argv:string array ->
        'Cmdliner.Term.t * Cmdliner.Term.info -> 'Cmdliner.Term.result
      val eval_choice :
        ?help:Format.formatter ->
        ?err:Format.formatter ->
        ?catch:bool ->
        ?argv:string array ->
        'Cmdliner.Term.t * Cmdliner.Term.info ->
        ('Cmdliner.Term.t * Cmdliner.Term.info) list ->
        'Cmdliner.Term.result
    end
  module Arg :
    sig
      type 'parser = string -> [ `Error of string | `Ok of 'a ]
      type 'a printer = Format.formatter -> '-> unit
      type 'a converter = 'Cmdliner.Arg.parser * 'Cmdliner.Arg.printer
      val some :
        ?none:string ->
        'Cmdliner.Arg.converter -> 'a option Cmdliner.Arg.converter
      type 'a t
      type info
      val info :
        ?docs:string ->
        ?docv:string -> ?doc:string -> string list -> Cmdliner.Arg.info
      val ( & ) : ('-> 'b) -> '-> 'b
      val flag : Cmdliner.Arg.info -> bool Cmdliner.Arg.t
      val flag_all : Cmdliner.Arg.info -> bool list Cmdliner.Arg.t
      val vflag : '-> ('a * Cmdliner.Arg.info) list -> 'Cmdliner.Arg.t
      val vflag_all :
        'a list -> ('a * Cmdliner.Arg.info) list -> 'a list Cmdliner.Arg.t
      val opt :
        ?vopt:'->
        'Cmdliner.Arg.converter ->
        '-> Cmdliner.Arg.info -> 'Cmdliner.Arg.t
      val opt_all :
        ?vopt:'->
        'Cmdliner.Arg.converter ->
        'a list -> Cmdliner.Arg.info -> 'a list Cmdliner.Arg.t
      val pos :
        ?rev:bool ->
        int ->
        'Cmdliner.Arg.converter ->
        '-> Cmdliner.Arg.info -> 'Cmdliner.Arg.t
      val pos_all :
        'Cmdliner.Arg.converter ->
        'a list -> Cmdliner.Arg.info -> 'a list Cmdliner.Arg.t
      val pos_left :
        ?rev:bool ->
        int ->
        'Cmdliner.Arg.converter ->
        'a list -> Cmdliner.Arg.info -> 'a list Cmdliner.Arg.t
      val pos_right :
        ?rev:bool ->
        int ->
        'Cmdliner.Arg.converter ->
        'a list -> Cmdliner.Arg.info -> 'a list Cmdliner.Arg.t
      val value : 'Cmdliner.Arg.t -> 'Cmdliner.Term.t
      val required : 'a option Cmdliner.Arg.t -> 'Cmdliner.Term.t
      val non_empty : 'a list Cmdliner.Arg.t -> 'a list Cmdliner.Term.t
      val last : 'a list Cmdliner.Arg.t -> 'Cmdliner.Term.t
      val bool : bool Cmdliner.Arg.converter
      val char : char Cmdliner.Arg.converter
      val int : int Cmdliner.Arg.converter
      val nativeint : nativeint Cmdliner.Arg.converter
      val int32 : int32 Cmdliner.Arg.converter
      val int64 : int64 Cmdliner.Arg.converter
      val float : float Cmdliner.Arg.converter
      val string : string Cmdliner.Arg.converter
      val enum : (string * 'a) list -> 'Cmdliner.Arg.converter
      val file : string Cmdliner.Arg.converter
      val dir : string Cmdliner.Arg.converter
      val non_dir_file : string Cmdliner.Arg.converter
      val list :
        ?sep:char ->
        'Cmdliner.Arg.converter -> 'a list Cmdliner.Arg.converter
      val array :
        ?sep:char ->
        'Cmdliner.Arg.converter -> 'a array Cmdliner.Arg.converter
      val pair :
        ?sep:char ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter -> ('a * 'b) Cmdliner.Arg.converter
      val t2 :
        ?sep:char ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter -> ('a * 'b) Cmdliner.Arg.converter
      val t3 :
        ?sep:char ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter -> ('a * 'b * 'c) Cmdliner.Arg.converter
      val t4 :
        ?sep:char ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter ->
        'Cmdliner.Arg.converter ->
        ('a * 'b * 'c * 'd) Cmdliner.Arg.converter
    end
end