functor (X : TaggedType) -> sig type t = X.t val hash : t -> int val equal : t -> t -> bool val compare : t -> t -> int end