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.variable * OpamTypes.variable_contents) list -> t
  module type SECTION =
    sig
      val available : t -> OpamTypes.section list
      val kind : t -> OpamTypes.section -> string
      val asmcomp : t -> OpamTypes.section -> string list
      val bytecomp : t -> OpamTypes.section -> string list
      val asmlink : t -> OpamTypes.section -> string list
      val bytelink : t -> OpamTypes.section -> string list
      val requires : t -> OpamTypes.section -> OpamTypes.section list
      val variable :
        t ->
        OpamTypes.section ->
        OpamTypes.variable -> OpamTypes.variable_contents option
      val variables : t -> OpamTypes.section -> OpamTypes.variable list
    end
  module Section : SECTION
  module Library : SECTION
  module Syntax : SECTION
  val variable :
    t -> OpamTypes.variable -> OpamTypes.variable_contents option
  val variables : t -> OpamTypes.variable list
end