module type SA = sig type data type t val make : data -> t val node : t -> data val hash : t -> int val uid : t -> int val equal : t -> t -> bool end module type S = sig type data type t = private { id : int; key : int; node : data } val make : data -> t val node : t -> data val hash : t -> int val uid : t -> int val equal : t -> t -> bool end module Make (H : Hashtbl.HashedType) : S with type data = H.t