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.switch ->
    OpamTypes.repository_name list ->
    ?criteria:(OpamTypes.solver_criteria * string) list ->
    ?solver:string -> int -> int -> t
  val with_switch : t -> OpamTypes.switch -> t
  val with_repositories : t -> OpamTypes.repository_name list -> t
  val with_current_opam_version : t -> t
  val with_criteria : t -> (OpamTypes.solver_criteria * string) list -> t
  val with_solver : t -> string option -> t
  val opam_version : t -> OpamTypes.opam_version
  val repositories : t -> OpamTypes.repository_name list
  val switch : t -> OpamTypes.switch
  val jobs : t -> int
  val dl_jobs : t -> int
  val criteria : t -> (OpamTypes.solver_criteria * string) list
  val solver : t -> string option
end