functor (I : sig type t end->
  sig
    type ti = I.t
    type t
    val create : int -> t
    val find : t -> edge -> ti
    val find_all : t -> edge -> ti list
    val add : t -> edge -> ti -> unit
    val replace : t -> edge -> ti -> unit
    val remove : t -> edge -> unit
    val clear : t -> unit
  end