sig
  type t = {
    mutable valid : bool;
    mutable value : VarUsage.Usage.domain;
    mutable param : VarUsage.Usage.domain;
    mutable calls :
      (bool * VarUsage.Root.t * VarUsage.Context.delta list) list;
  }
  val empty : unit -> VarUsage.Occur.t
  val merge_with :
    VarUsage.Usage.domain ->
    VarUsage.Context.delta list -> VarUsage.Usage.domain
  val update :
    VarUsage.Occur.t ->
    bool -> VarUsage.Context.target -> VarUsage.Context.delta list -> unit
  val propagate :
    bool Pervasives.ref ->
    VarUsage.Occur.t -> (VarUsage.Root.t -> VarUsage.Usage.domain) -> unit
end