sig
  val list_of_self : int -> '-> 'a list
  val cross_product : 'a list -> 'b list -> ('a * 'b) list
  module MakeOrderedSetPair :
    functor (Ordered : Set.OrderedType->
      sig type t = Ordered.t * Ordered.t val compare : t -> t -> int end
end