functor (A : Thing) (B : Thing->
  sig
    type t = A.t * B.t
    val equal : t -> t -> bool
    val hash : t -> int
    val compare : t -> t -> int
    val output : Pervasives.out_channel -> t -> unit
    val print : Format.formatter -> t -> unit
  end