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