    sig
      module type OrderedType =
        sig
          type t
          val compare : Set.OrderedType.t -> Set.OrderedType.t -> int
        end
      module type S =
        sig
          type elt
          and t
          val empty : Set.S.t
          val is_empty : Set.S.t -> bool
          val mem : Set.S.elt -> Set.S.t -> bool
          val add : Set.S.elt -> Set.S.t -> Set.S.t
          val singleton : Set.S.elt -> Set.S.t
          val remove : Set.S.elt -> Set.S.t -> Set.S.t
          val union : Set.S.t -> Set.S.t -> Set.S.t
          val inter : Set.S.t -> Set.S.t -> Set.S.t
          val diff : Set.S.t -> Set.S.t -> Set.S.t
          val compare : Set.S.t -> Set.S.t -> int
          val equal : Set.S.t -> Set.S.t -> bool
          val subset : Set.S.t -> Set.S.t -> bool
          val iter : (Set.S.elt -> unit) -> Set.S.t -> unit
          val fold : (Set.S.elt -> 'a -> 'a) -> Set.S.t -> 'a -> 'a
          val for_all : (Set.S.elt -> bool) -> Set.S.t -> bool
          val exists : (Set.S.elt -> bool) -> Set.S.t -> bool
          val filter : (Set.S.elt -> bool) -> Set.S.t -> Set.S.t
          val partition : (Set.S.elt -> bool) -> Set.S.t -> Set.S.t * Set.S.t
          val cardinal : Set.S.t -> int
          val elements : Set.S.t -> Set.S.elt list
          val min_elt : Set.S.t -> Set.S.elt
          val max_elt : Set.S.t -> Set.S.elt
          val choose : Set.S.t -> Set.S.elt
        end
      module Make :
        functor (Ord : OrderedType) ->
          sig
            type elt = Ord.t
            and t
            val empty : Set.S.t
            val is_empty : Set.S.t -> bool
            val mem : Set.S.elt -> Set.S.t -> bool
            val add : Set.S.elt -> Set.S.t -> Set.S.t
            val singleton : Set.S.elt -> Set.S.t
            val remove : Set.S.elt -> Set.S.t -> Set.S.t
            val union : Set.S.t -> Set.S.t -> Set.S.t
            val inter : Set.S.t -> Set.S.t -> Set.S.t
            val diff : Set.S.t -> Set.S.t -> Set.S.t
            val compare : Set.S.t -> Set.S.t -> int
            val equal : Set.S.t -> Set.S.t -> bool
            val subset : Set.S.t -> Set.S.t -> bool
            val iter : (Set.S.elt -> unit) -> Set.S.t -> unit
            val fold : (Set.S.elt -> 'a -> 'a) -> Set.S.t -> 'a -> 'a
            val for_all : (Set.S.elt -> bool) -> Set.S.t -> bool
            val exists : (Set.S.elt -> bool) -> Set.S.t -> bool
            val filter : (Set.S.elt -> bool) -> Set.S.t -> Set.S.t
            val partition : (Set.S.elt -> bool) -> Set.S.t -> Set.S.t * Set.S.t
            val cardinal : Set.S.t -> int
            val elements : Set.S.t -> Set.S.elt list
            val min_elt : Set.S.t -> Set.S.elt
            val max_elt : Set.S.t -> Set.S.elt
            val choose : Set.S.t -> Set.S.elt
          end
    end