functor (Key : Key->
  sig
    module Key :
      sig
        type t = Key.t
        type sexpable = t
        val sexp_of_t : sexpable -> Sexplib.Sexp.t
        val t_of_sexp : Sexplib.Sexp.t -> sexpable
        val hash : t -> int
        val compare : t -> t -> int
      end
    type 'a t
    type 'a sexpable = 'a t
    val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'a sexpable -> Sexplib.Sexp.t
    val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'a sexpable
    val create : int -> 'a t
    val add : 'a t -> key:Key.t -> data:'-> unit
    val remove : 'a t -> Key.t -> unit
    val find : 'a t -> Key.t -> 'a option
    val length : 'a t -> int
    val fold : 'a t -> init:'-> f:(key:Key.t -> data:'-> '-> 'b) -> 'b
  end