functor (A : T) (B : T->
  sig
    type t = A.t * B.t
    val eq : t -> t -> bool
    val to_string : t -> string
    val compare : t -> t -> int
  end