sig
  type t
  val empty : t
  val write : OpamTypes.filename -> t -> unit
  val read : OpamTypes.filename -> t
  val safe_read : OpamTypes.filename -> t
  val read_from_channel : in_channel -> t
  val write_to_channel : out_channel -> t -> unit
  val create : OpamTypes.package -> t
  val template : OpamTypes.package -> t
  val validate : t -> string list
  val is_explicit : OpamTypes.filename -> bool
  val opam_version : t -> OpamTypes.opam_version
  val name : t -> OpamTypes.name
  val name_opt : t -> OpamTypes.name option
  val version : t -> OpamTypes.version
  val version_opt : t -> OpamTypes.version option
  val ocaml_version : t -> OpamTypes.compiler_constraint option
  val os : t -> (bool * string) OpamTypes.generic_formula
  val available : t -> OpamTypes.filter
  val maintainer : t -> string list
  val substs : t -> OpamTypes.basename list
  val build_env : t -> (string * string * string) list
  val build : t -> OpamTypes.command list
  val install : t -> OpamTypes.command list
  val remove : t -> OpamTypes.command list
  val depends : t -> OpamTypes.ext_formula
  val depopts : t -> OpamTypes.ext_formula
  val depexts : t -> OpamTypes.tags option
  val conflicts : t -> OpamTypes.formula
  val libraries : t -> (string * OpamTypes.filter option) list
  val syntax : t -> (string * OpamTypes.filter option) list
  val patches : t -> (OpamTypes.basename * OpamTypes.filter option) list
  val homepage : t -> string list
  val author : t -> string list
  val license : t -> string list
  val doc : t -> string list
  val tags : t -> string list
  val build_test : t -> OpamTypes.command list
  val build_doc : t -> OpamTypes.command list
  val messages : t -> (string * OpamTypes.filter option) list
  val post_messages : t -> (string * OpamTypes.filter option) list
  val bug_reports : t -> string list
  val flags : t -> OpamTypes.package_flag list
  val with_opam_version : t -> OpamTypes.opam_version -> t
  val dev_repo : t -> OpamTypes.pin_option option
  val with_name : t -> OpamTypes.name -> t
  val with_name_opt : t -> OpamTypes.name option -> t
  val with_version : t -> OpamTypes.version -> t
  val with_version_opt : t -> OpamTypes.version option -> t
  val with_depends : t -> OpamTypes.ext_formula -> t
  val with_depopts : t -> OpamTypes.ext_formula -> t
  val with_conflicts : t -> OpamTypes.formula -> t
  val with_build : t -> OpamTypes.command list -> t
  val with_install : t -> OpamTypes.command list -> t
  val with_remove : t -> OpamTypes.command list -> t
  val with_libraries : t -> (string * OpamTypes.filter option) list -> t
  val with_syntax : t -> (string * OpamTypes.filter option) list -> t
  val with_substs : t -> OpamTypes.basename list -> t
  val with_ocaml_version : t -> OpamTypes.compiler_constraint option -> t
  val with_os : t -> (bool * string) OpamTypes.generic_formula -> t
  val with_maintainer : t -> string list -> t
  val with_patches :
    t -> (OpamTypes.basename * OpamTypes.filter option) list -> t
  val with_bug_reports : t -> string list -> t
  val with_depexts : t -> OpamTypes.tags option -> t
  val with_flags : t -> OpamTypes.package_flag list -> t
  val with_dev_repo : t -> OpamTypes.pin_option option -> t
  val to_1_0 : OpamTypes.file -> OpamTypes.file
end