sig
  type e1 = package_name
  type e2 = package
  type elt = e1 * e2
  type id = package_id
  type t
  val create : unit -> t
  val register : t -> elt -> id
  val replace : t -> elt -> unit
  val find : t -> id -> elt
  val search1 : t -> e1 -> id
  val search2 : t -> e2 -> id
  val compare_id : id -> id -> int
  val scribe_id : 'Conduit.conduit -> '-> id -> unit
  val iter : t -> (id -> elt -> unit) -> unit
  val set_watcher : t -> (id -> elt -> unit) -> unit
end