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