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