functor (X : Sig.ORDERED_TYPE) (Y : Sig.ORDERED_TYPE->
  sig type t = X.t * Y.t val compare : t -> t -> int end