sig
  val ( >>= ) :
    ('a, 'b) Stdlib.result ->
    ('-> ('c, 'b) Stdlib.result) -> ('c, 'b) Stdlib.result
  val ( >>| ) :
    ('a, 'b) Stdlib.result -> ('-> 'c) -> ('c, 'b) Stdlib.result
  type ('a, 'b) r = ('a, 'b) Stdlib.result = Ok of '| Error of 'b
  type 'a result = ('a, [ `Msg of string ]) Topkg.r
  module R :
    sig
      val reword_error : ('-> 'c) -> ('a, 'b) Topkg.r -> ('a, 'c) Topkg.r
      type msg = [ `Msg of string ]
      val error_msg : string -> ('b, [> Topkg.R.msg ]) Topkg.r
      val error_msgf :
        ('a, Stdlib.Format.formatter, unit, ('b, [> Topkg.R.msg ]) Topkg.r)
        Stdlib.format4 -> 'a
      val reword_error_msg :
        ?replace:bool ->
        (string -> Topkg.R.msg) ->
        ('a, Topkg.R.msg) Topkg.r -> ('a, [> Topkg.R.msg ]) Topkg.r
    end
  val strf : ('a, Stdlib.Format.formatter, unit, string) Stdlib.format4 -> 'a
  module String :
    sig
      external length : string -> int = "%string_length"
      external get : string -> int -> char = "%string_safe_get"
      external set : bytes -> int -> char -> unit = "%string_safe_set"
      external create : int -> bytes = "caml_create_string"
      val make : int -> char -> string
      val init : int -> (int -> char) -> string
      val copy : string -> string
      val sub : string -> int -> int -> string
      val fill : bytes -> int -> int -> char -> unit
      val blit : string -> int -> bytes -> int -> int -> unit
      val concat : string -> string list -> string
      val iter : (char -> unit) -> string -> unit
      val iteri : (int -> char -> unit) -> string -> unit
      val map : (char -> char) -> string -> string
      val mapi : (int -> char -> char) -> string -> string
      val trim : string -> string
      val escaped : string -> string
      val index : string -> char -> int
      val index_opt : string -> char -> int option
      val rindex : string -> char -> int
      val rindex_opt : string -> char -> int option
      val index_from : string -> int -> char -> int
      val index_from_opt : string -> int -> char -> int option
      val rindex_from : string -> int -> char -> int
      val rindex_from_opt : string -> int -> char -> int option
      val contains : string -> char -> bool
      val contains_from : string -> int -> char -> bool
      val rcontains_from : string -> int -> char -> bool
      val uppercase : string -> string
      val lowercase : string -> string
      val capitalize : string -> string
      val uncapitalize : string -> string
      val uppercase_ascii : string -> string
      val lowercase_ascii : string -> string
      val capitalize_ascii : string -> string
      val uncapitalize_ascii : string -> string
      type t = string
      val compare : t -> t -> int
      val equal : t -> t -> bool
      val split_on_char : char -> string -> string list
      val to_seq : t -> char Seq.t
      val to_seqi : t -> (int * char) Seq.t
      val of_seq : char Seq.t -> t
      external unsafe_get : string -> int -> char = "%string_unsafe_get"
      external unsafe_set : bytes -> int -> char -> unit
        = "%string_unsafe_set"
      external unsafe_blit : string -> int -> bytes -> int -> int -> unit
        = "caml_blit_string" [@@noalloc]
      external unsafe_fill : bytes -> int -> int -> char -> unit
        = "caml_fill_string" [@@noalloc]
      val head : string -> char option
      val is_prefix : affix:string -> string -> bool
      val is_suffix : affix:string -> string -> bool
      val for_all : (char -> bool) -> string -> bool
      val exists : (char -> bool) -> string -> bool
      val with_index_range : ?first:int -> ?last:int -> string -> string
      val cut : ?rev:bool -> sep:char -> string -> (string * string) option
      val cuts : ?empty:bool -> sep:char -> string -> string list
      val parse_version : string -> (int * int * int * string option) option
      val drop_initial_v : string -> string
    end
  type fpath = string
  module Fpath :
    sig
      type t = Topkg.fpath
      val append : Topkg.Fpath.t -> Topkg.Fpath.t -> Topkg.Fpath.t
      val ( // ) : Topkg.Fpath.t -> Topkg.Fpath.t -> Topkg.Fpath.t
      val is_dir_path : Topkg.Fpath.t -> bool
      val is_file_path : Topkg.Fpath.t -> bool
      val basename : Topkg.Fpath.t -> string
      val dirname : Topkg.Fpath.t -> string
      val get_ext : Topkg.Fpath.t -> string
      val has_ext : string -> Topkg.Fpath.t -> bool
      val rem_ext : Topkg.Fpath.t -> Topkg.Fpath.t
    end
  module Cmd :
    sig
      type t
      val v : string -> Topkg.Cmd.t
      val empty : Topkg.Cmd.t
      val is_empty : Topkg.Cmd.t -> bool
      val ( % ) : Topkg.Cmd.t -> string -> Topkg.Cmd.t
      val ( %% ) : Topkg.Cmd.t -> Topkg.Cmd.t -> Topkg.Cmd.t
      val add_arg : Topkg.Cmd.t -> string -> Topkg.Cmd.t
      val add_args : Topkg.Cmd.t -> Topkg.Cmd.t -> Topkg.Cmd.t
      val on : bool -> Topkg.Cmd.t -> Topkg.Cmd.t
      val p : Topkg.fpath -> string
      val equal : Topkg.Cmd.t -> Topkg.Cmd.t -> bool
      val compare : Topkg.Cmd.t -> Topkg.Cmd.t -> int
      val to_list : Topkg.Cmd.t -> string list
      val of_list : ?slip:string -> string list -> Topkg.Cmd.t
      val dump : Stdlib.Format.formatter -> Topkg.Cmd.t -> unit
    end
  module Log :
    sig
      type level = App | Error | Warning | Info | Debug
      val level : unit -> Topkg.Log.level option
      val set_level : Topkg.Log.level option -> unit
      val level_to_string : Topkg.Log.level option -> string
      val level_of_string :
        string -> (Topkg.Log.level option, [ `Msg of string ]) Topkg.r
      type 'a msgf =
          (?header:string ->
           ('a, Stdlib.Format.formatter, unit) Stdlib.format -> 'a) ->
          unit
      val msg : Topkg.Log.level -> 'Topkg.Log.msgf -> unit
      val app : 'Topkg.Log.msgf -> unit
      val err : 'Topkg.Log.msgf -> unit
      val warn : 'Topkg.Log.msgf -> unit
      val info : 'Topkg.Log.msgf -> unit
      val debug : 'Topkg.Log.msgf -> unit
      val on_error_msg :
        ?level:Topkg.Log.level -> use:(unit -> 'a) -> 'Topkg.result -> 'a
      val err_count : unit -> int
      val warn_count : unit -> int
    end
  module OS :
    sig
      module Env :
        sig
          val var : string -> string option
          val opt_var : string -> absent:string -> string
        end
      module File :
        sig
          val null : Topkg.fpath
          val dash : Topkg.fpath
          val exists : Topkg.fpath -> bool Topkg.result
          val must_exist : Topkg.fpath -> Topkg.fpath Topkg.result
          val delete : ?must_exist:bool -> Topkg.fpath -> unit Topkg.result
          val fold :
            ?skip:(Topkg.fpath -> bool) ->
            (Topkg.fpath -> '-> 'a) ->
            '-> Topkg.fpath list -> 'Topkg.result
          val read : Topkg.fpath -> string Topkg.result
          val write : Topkg.fpath -> string -> unit Topkg.result
          val write_subst :
            Topkg.fpath ->
            (string * string) list -> string -> unit Topkg.result
          val tmp : unit -> Topkg.fpath Topkg.result
        end
      module Dir :
        sig
          val exists : Topkg.fpath -> bool Topkg.result
          val must_exist : Topkg.fpath -> Topkg.fpath Topkg.result
          val contents :
            ?dotfiles:bool ->
            ?rel:bool -> Topkg.fpath -> Topkg.fpath list Topkg.result
          val current : unit -> Topkg.fpath Topkg.result
          val set_current : Topkg.fpath -> unit Topkg.result
          val with_current :
            Topkg.fpath -> ('-> 'b) -> '-> 'Topkg.result
        end
      module Cmd :
        sig
          val exists : Topkg.Cmd.t -> bool Topkg.result
          val must_exist : Topkg.Cmd.t -> Topkg.Cmd.t Topkg.result
          val run : ?err:Topkg.fpath -> Topkg.Cmd.t -> unit Topkg.result
          val run_status :
            ?err:Topkg.fpath ->
            Topkg.Cmd.t -> [ `Exited of int ] Topkg.result
          type run_status = Topkg.Cmd.t * [ `Exited of int ]
          val success :
            ('a * Topkg.OS.Cmd.run_status) Topkg.result -> 'Topkg.result
          type run_out
          val out_string :
            ?trim:bool ->
            Topkg.OS.Cmd.run_out ->
            (string * Topkg.OS.Cmd.run_status) Topkg.result
          val out_lines :
            ?trim:bool ->
            Topkg.OS.Cmd.run_out ->
            (string list * Topkg.OS.Cmd.run_status) Topkg.result
          val out_file :
            Topkg.fpath ->
            Topkg.OS.Cmd.run_out ->
            (unit * Topkg.OS.Cmd.run_status) Topkg.result
          val out_stdout :
            Topkg.OS.Cmd.run_out ->
            (unit * Topkg.OS.Cmd.run_status) Topkg.result
          val to_string :
            ?trim:bool -> Topkg.OS.Cmd.run_out -> string Topkg.result
          val to_lines :
            ?trim:bool -> Topkg.OS.Cmd.run_out -> string list Topkg.result
          val to_file :
            Topkg.fpath -> Topkg.OS.Cmd.run_out -> unit Topkg.result
          val run_out :
            ?err:Topkg.fpath -> Topkg.Cmd.t -> Topkg.OS.Cmd.run_out
        end
    end
  module Vcs :
    sig
      type kind = [ `Git | `Hg ]
      val pp_kind : Stdlib.Format.formatter -> Topkg.Vcs.kind -> unit
      type commit_ish = string
      type t
      val kind : Topkg.Vcs.t -> Topkg.Vcs.kind
      val dir : Topkg.Vcs.t -> Topkg.fpath
      val cmd : Topkg.Vcs.t -> Topkg.Cmd.t
      val find : ?dir:Topkg.fpath -> unit -> Topkg.Vcs.t option Topkg.result
      val get : ?dir:Topkg.fpath -> unit -> Topkg.Vcs.t Topkg.result
      val pp : Stdlib.Format.formatter -> Topkg.Vcs.t -> unit
      val is_dirty : Topkg.Vcs.t -> bool Topkg.result
      val not_dirty : Topkg.Vcs.t -> unit Topkg.result
      val file_is_dirty : Topkg.Vcs.t -> Topkg.fpath -> bool Topkg.result
      val head : ?dirty:bool -> Topkg.Vcs.t -> string Topkg.result
      val commit_id :
        ?dirty:bool ->
        ?commit_ish:Topkg.Vcs.commit_ish ->
        Topkg.Vcs.t -> string Topkg.result
      val commit_ptime_s :
        ?commit_ish:Topkg.Vcs.commit_ish -> Topkg.Vcs.t -> int Topkg.result
      val describe :
        ?dirty:bool ->
        ?commit_ish:Topkg.Vcs.commit_ish ->
        Topkg.Vcs.t -> string Topkg.result
      val tags : Topkg.Vcs.t -> string list Topkg.result
      val changes :
        ?until:Topkg.Vcs.commit_ish ->
        Topkg.Vcs.t ->
        after:Topkg.Vcs.commit_ish -> (string * string) list Topkg.result
      val tracked_files :
        ?tree_ish:string -> Topkg.Vcs.t -> Topkg.fpath list Topkg.result
      val clone : Topkg.Vcs.t -> dir:Topkg.fpath -> unit Topkg.result
      val checkout :
        ?branch:string ->
        Topkg.Vcs.t -> commit_ish:Topkg.Vcs.commit_ish -> unit Topkg.result
      val commit_files :
        ?msg:string -> Topkg.Vcs.t -> Topkg.fpath list -> unit Topkg.result
      val tag :
        ?force:bool ->
        ?sign:bool ->
        ?msg:string ->
        ?commit_ish:string -> Topkg.Vcs.t -> string -> unit Topkg.result
      val delete_tag : Topkg.Vcs.t -> string -> unit Topkg.result
    end
  module Conf :
    sig
      type 'a conv
      val conv :
        ?docv:string ->
        (string -> 'Topkg.result) ->
        (Stdlib.Format.formatter -> '-> unit) -> 'Topkg.Conf.conv
      val bool : bool Topkg.Conf.conv
      val int : int Topkg.Conf.conv
      val string : string Topkg.Conf.conv
      val fpath : Topkg.fpath Topkg.Conf.conv
      val some :
        ?none:string -> 'Topkg.Conf.conv -> 'a option Topkg.Conf.conv
      type 'a key
      val key :
        ?docv:string ->
        ?doc:string ->
        ?env:string ->
        string -> 'Topkg.Conf.conv -> absent:'-> 'Topkg.Conf.key
      val discovered_key :
        ?docv:string ->
        ?doc:string ->
        ?env:string ->
        string ->
        'Topkg.Conf.conv ->
        absent:(unit -> 'Topkg.result) -> 'Topkg.Conf.key
      val with_pkg : ?default:bool -> string -> bool Topkg.Conf.key
      type t
      val value : Topkg.Conf.t -> 'Topkg.Conf.key -> 'a
      val pkg_name : Topkg.Conf.t -> string
      val build_dir : Topkg.Conf.t -> Topkg.fpath
      val vcs : Topkg.Conf.t -> bool
      val dev_pkg : Topkg.Conf.t -> bool
      val pinned : Topkg.Conf.t -> bool
      val jobs : Topkg.Conf.t -> int
      type build_context = [ `Dev | `Distrib | `Pin ]
      val build_context : Topkg.Conf.t -> [ `Dev | `Distrib | `Pin ]
      val build_tests : Topkg.Conf.t -> bool
      val debug : Topkg.Conf.t -> bool
      val debugger_support : Topkg.Conf.t -> bool
      val profile : Topkg.Conf.t -> bool
      val toolchain : Topkg.Conf.t -> string option
      val dump : Stdlib.Format.formatter -> Topkg.Conf.t -> unit
      type os = [ `Build_os | `Host_os ]
      val tool : ?conf:Topkg.Conf.t -> string -> Topkg.Conf.os -> Topkg.Cmd.t
      module OCaml :
        sig
          type conf = Topkg.Conf.t
          type t
          val v :
            Topkg.Conf.OCaml.conf -> Topkg.Conf.os -> Topkg.Conf.OCaml.t
          val find : string -> Topkg.Conf.OCaml.t -> string option
          val version : Topkg.Conf.OCaml.t -> int * int * int * string option
          val ext_asm : Topkg.Conf.OCaml.t -> string
          val ext_obj : Topkg.Conf.OCaml.t -> string
          val ext_lib : Topkg.Conf.OCaml.t -> string
          val ext_dll : Topkg.Conf.OCaml.t -> string
          val ext_exe : Topkg.Conf.OCaml.t -> string
          val native : Topkg.Conf.OCaml.t -> bool
          val native_dynlink : Topkg.Conf.OCaml.t -> bool
          val word_size : Topkg.Conf.OCaml.t -> int
          val dump : Stdlib.Format.formatter -> Topkg.Conf.OCaml.t -> unit
        end
    end
  module Exts :
    sig
      type ext
      type t = Topkg.Exts.ext list
      val interface : Topkg.Exts.t
      val cmx : Topkg.Exts.ext list
      val api : Topkg.Exts.t
      val c_library : Topkg.Exts.ext list
      val c_dll_library : Topkg.Exts.ext list
      val library : Topkg.Exts.ext list
      val module_library : Topkg.Exts.ext list
      val exe : Topkg.Exts.ext list
      val exts : string list -> Topkg.Exts.ext list
      val ext : string -> Topkg.Exts.ext list
      val ext_to_string : Topkg.Conf.OCaml.t -> Topkg.Exts.ext -> string
    end
  module Pkg :
    sig
      type install
      val nothing : Topkg.Pkg.install
      val flatten : Topkg.Pkg.install list -> Topkg.Pkg.install
      type field =
          ?force:bool ->
          ?built:bool ->
          ?cond:bool ->
          ?exts:Topkg.Exts.t ->
          ?dst:Topkg.fpath -> Topkg.fpath -> Topkg.Pkg.install
      type exec_field = ?auto:bool -> Topkg.Pkg.field
      val bin : Topkg.Pkg.exec_field
      val doc : Topkg.Pkg.field
      val etc : Topkg.Pkg.field
      val lib : Topkg.Pkg.field
      val lib_root : Topkg.Pkg.field
      val libexec : Topkg.Pkg.exec_field
      val libexec_root : Topkg.Pkg.exec_field
      val man : Topkg.Pkg.field
      val misc : Topkg.Pkg.field
      val sbin : Topkg.Pkg.exec_field
      val share : Topkg.Pkg.field
      val share_root : Topkg.Pkg.field
      val stublibs : Topkg.Pkg.field
      val toplevel : Topkg.Pkg.field
      val unknown : string -> Topkg.Pkg.field
      val test :
        ?run:bool ->
        ?dir:Topkg.fpath -> ?args:Topkg.Cmd.t -> Topkg.Pkg.exec_field
      val mllib :
        ?field:Topkg.Pkg.field ->
        ?cond:bool ->
        ?cma:bool ->
        ?cmxa:bool ->
        ?cmxs:bool ->
        ?api:string list ->
        ?dst_dir:Topkg.fpath -> Topkg.fpath -> Topkg.Pkg.install
      val clib :
        ?dllfield:Topkg.Pkg.field ->
        ?libfield:Topkg.Pkg.field ->
        ?cond:bool ->
        ?lib_dst_dir:Topkg.fpath -> Topkg.fpath -> Topkg.Pkg.install
      type build
      val build :
        ?prepare_on_pin:bool ->
        ?dir:Topkg.fpath ->
        ?pre:(Topkg.Conf.t -> unit Topkg.result) ->
        ?cmd:(Topkg.Conf.t ->
              Topkg.Conf.os -> Topkg.fpath list -> unit Topkg.result) ->
        ?post:(Topkg.Conf.t -> unit Topkg.result) ->
        ?clean:(Topkg.Conf.os -> build_dir:Topkg.fpath -> unit Topkg.result) ->
        unit -> Topkg.Pkg.build
      val build_cmd : Topkg.Conf.t -> Topkg.Conf.os -> Topkg.Cmd.t
      val clean_cmd : Topkg.Conf.os -> build_dir:Topkg.fpath -> Topkg.Cmd.t
      val ocb_tag :
        Topkg.Conf.t -> 'Topkg.Conf.key -> string -> Topkg.Cmd.t
      val ocb_bool_tag :
        Topkg.Conf.t -> bool Topkg.Conf.key -> string -> Topkg.Cmd.t
      val ocb_bool_tags :
        Topkg.Conf.t -> (bool Topkg.Conf.key * string) list -> Topkg.Cmd.t
      type watermark =
          string *
          [ `Name
          | `Opam of Topkg.fpath option * string * string
          | `String of string
          | `Vcs of [ `Commit_id ]
          | `Version
          | `Version_num ]
      type distrib
      val distrib :
        ?watermarks:Topkg.Pkg.watermark list ->
        ?files_to_watermark:(unit -> Topkg.fpath list Topkg.result) ->
        ?massage:(unit -> unit Topkg.result) ->
        ?exclude_paths:(unit -> Topkg.fpath list Topkg.result) ->
        ?uri:string -> unit -> Topkg.Pkg.distrib
      val watermarks : Topkg.Pkg.watermark list
      val files_to_watermark : unit -> Topkg.fpath list Topkg.result
      val massage : unit -> unit Topkg.result
      val exclude_paths : unit -> Topkg.fpath list Topkg.result
      type publish
      val publish :
        ?artefacts:[ `Alt of string | `Distrib | `Doc ] list ->
        unit -> Topkg.Pkg.publish
      type std_file
      val std_file : ?install:bool -> Topkg.fpath -> Topkg.Pkg.std_file
      type meta_file
      val meta_file :
        ?lint:bool -> ?install:bool -> Topkg.fpath -> Topkg.Pkg.meta_file
      type opam_file
      val opam_file :
        ?lint:bool ->
        ?lint_deps_excluding:string list option ->
        ?install:bool -> Topkg.fpath -> Topkg.Pkg.opam_file
      val describe :
        ?delegate:Topkg.Cmd.t ->
        ?readmes:Topkg.Pkg.std_file list ->
        ?licenses:Topkg.Pkg.std_file list ->
        ?change_logs:Topkg.Pkg.std_file list ->
        ?metas:Topkg.Pkg.meta_file list ->
        ?opams:Topkg.Pkg.opam_file list ->
        ?lint_files:Topkg.fpath list option ->
        ?lint_custom:(unit -> Topkg.R.msg Topkg.result list) ->
        ?distrib:Topkg.Pkg.distrib ->
        ?publish:Topkg.Pkg.publish ->
        ?build:Topkg.Pkg.build ->
        string ->
        (Topkg.Conf.t -> Topkg.Pkg.install list Topkg.result) -> unit
    end
  module Private :
    sig
      val disable_main : unit -> unit
      module Codec :
        sig
          type error = Corrupted of (string * string) | Version of int * int
          val pp_error :
            Stdlib.Format.formatter -> Topkg.Private.Codec.error -> unit
          exception Error of Topkg.Private.Codec.error
          type 'a t
          val v :
            kind:string ->
            enc:('-> string) ->
            dec:(string -> 'a) -> 'Topkg.Private.Codec.t
          val kind : 'Topkg.Private.Codec.t -> string
          val enc : 'Topkg.Private.Codec.t -> '-> string
          val dec : 'Topkg.Private.Codec.t -> string -> 'a
          val dec_result :
            'Topkg.Private.Codec.t -> string -> 'Topkg.result
          val with_kind :
            string -> 'Topkg.Private.Codec.t -> 'Topkg.Private.Codec.t
          val write :
            Topkg.fpath ->
            'Topkg.Private.Codec.t -> '-> unit Topkg.result
          val read :
            Topkg.fpath -> 'Topkg.Private.Codec.t -> 'Topkg.result
          val unit : unit Topkg.Private.Codec.t
          val const : '-> 'Topkg.Private.Codec.t
          val bool : bool Topkg.Private.Codec.t
          val int : int Topkg.Private.Codec.t
          val string : string Topkg.Private.Codec.t
          val option :
            'Topkg.Private.Codec.t -> 'a option Topkg.Private.Codec.t
          val result :
            ok:'Topkg.Private.Codec.t ->
            error:'Topkg.Private.Codec.t ->
            ('a, 'b) Topkg.r Topkg.Private.Codec.t
          val list :
            'Topkg.Private.Codec.t -> 'a list Topkg.Private.Codec.t
          val pair :
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t -> ('a * 'b) Topkg.Private.Codec.t
          val t3 :
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t -> ('a * 'b * 'c) Topkg.Private.Codec.t
          val t4 :
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            ('a * 'b * 'c * 'd) Topkg.Private.Codec.t
          val t5 :
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            'Topkg.Private.Codec.t ->
            ('a * 'b * 'c * 'd * 'e) Topkg.Private.Codec.t
          val alt :
            kind:string ->
            ('-> int) ->
            'Topkg.Private.Codec.t array -> 'Topkg.Private.Codec.t
          val version :
            int -> 'Topkg.Private.Codec.t -> 'Topkg.Private.Codec.t
          val view :
            ?kind:string ->
            ('-> 'b) * ('-> 'a) ->
            'Topkg.Private.Codec.t -> 'Topkg.Private.Codec.t
          val msg : [ `Msg of string ] Topkg.Private.Codec.t
          val result_error_msg :
            'Topkg.Private.Codec.t -> 'Topkg.result Topkg.Private.Codec.t
          val fpath : Topkg.Fpath.t Topkg.Private.Codec.t
          val cmd : Topkg.Cmd.t Topkg.Private.Codec.t
        end
      module Pkg :
        sig
          type t
          val empty : Topkg.Private.Pkg.t
          val name : Topkg.Private.Pkg.t -> string
          val delegate : Topkg.Private.Pkg.t -> Topkg.Cmd.t option
          val build_dir : Topkg.Private.Pkg.t -> Topkg.fpath
          val readmes : Topkg.Private.Pkg.t -> Topkg.fpath list
          val change_logs : Topkg.Private.Pkg.t -> Topkg.fpath list
          val licenses : Topkg.Private.Pkg.t -> Topkg.fpath list
          val opam : name:string -> Topkg.Private.Pkg.t -> Topkg.fpath
          val distrib_uri : Topkg.Private.Pkg.t -> string option
          val publish_artefacts :
            Topkg.Private.Pkg.t -> [ `Alt of string | `Distrib | `Doc ] list
          val lint_custom :
            Topkg.Private.Pkg.t ->
            (unit -> Topkg.R.msg Topkg.result list) option
          val lint_files : Topkg.Private.Pkg.t -> Topkg.fpath list option
          val lint_metas : Topkg.Private.Pkg.t -> (Topkg.fpath * bool) list
          val lint_opams :
            Topkg.Private.Pkg.t ->
            (Topkg.fpath * bool * string list option) list
          val codec : Topkg.Private.Pkg.t Topkg.Private.Codec.t
        end
      module Ipc :
        sig
          type 'a t
          val cmd : 'Topkg.Private.Ipc.t -> Topkg.Cmd.t
          val codec : 'Topkg.Private.Ipc.t -> 'Topkg.Private.Codec.t
          val answer : 'Topkg.Private.Ipc.t -> Topkg.fpath
          val pkg : unit -> Topkg.Private.Pkg.t Topkg.Private.Ipc.t
          val lint_custom :
            unit -> Topkg.R.msg Topkg.result list option Topkg.Private.Ipc.t
          val distrib_prepare :
            dist_build_dir:Topkg.fpath ->
            name:string ->
            version:string ->
            opam:Topkg.fpath ->
            opam_adds:string ->
            Topkg.fpath list Topkg.result Topkg.Private.Ipc.t
        end
      module Opam :
        sig
          module File :
            sig
              type t = (string * string list) list
              val codec : Topkg.Private.Opam.File.t Topkg.Private.Codec.t
              val fields :
                Topkg.fpath -> (string * string list) list Topkg.result
            end
        end
    end
end