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 : out_channel -> t -> unit     val print : Format.formatter -> t -> unit   end