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 replace :
    t -> (OpamTypes.full_variable -> OpamTypes.variable_contents) -> t
  val replace_string :
    string ->
    (OpamTypes.full_variable -> OpamTypes.variable_contents) -> string
end