functor (S : Set.S->
  functor (P : sig type t = S.elt val to_string : t -> string end->
    sig
      val equal : ?msg:string -> S.t -> S.t -> unit
      val not_equal : ?msg:string -> S.t -> S.t -> unit
    end