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 '| `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