sig
  module type T =
    sig
      type t
      module Element : sig type t end
      val nil : Cf_set.T.t
      val empty : Cf_set.T.t -> bool
      val size : Cf_set.T.t -> int
      val member : Cf_set.T.Element.t -> Cf_set.T.t -> bool
      val singleton : Cf_set.T.Element.t -> Cf_set.T.t
      val min : Cf_set.T.t -> Cf_set.T.Element.t
      val max : Cf_set.T.t -> Cf_set.T.Element.t
      val put : Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.t
      val clear : Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.t
      val union : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
      val diff : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
      val intersect : Cf_set.T.t -> Cf_set.T.t -> Cf_set.T.t
      val compare : Cf_set.T.t -> Cf_set.T.t -> int
      val subset : Cf_set.T.t -> Cf_set.T.t -> bool
      val of_list : Cf_set.T.Element.t list -> Cf_set.T.t
      val of_list_incr : Cf_set.T.Element.t list -> Cf_set.T.t
      val of_list_decr : Cf_set.T.Element.t list -> Cf_set.T.t
      val of_seq : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
      val of_seq_incr : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
      val of_seq_decr : Cf_set.T.Element.t Cf_seq.t -> Cf_set.T.t
      val to_list_incr : Cf_set.T.t -> Cf_set.T.Element.t list
      val to_list_decr : Cf_set.T.t -> Cf_set.T.Element.t list
      val to_seq_incr : Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
      val to_seq_decr : Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
      val nearest_decr :
        Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
      val nearest_incr :
        Cf_set.T.Element.t -> Cf_set.T.t -> Cf_set.T.Element.t Cf_seq.t
      val iterate : (Cf_set.T.Element.t -> unit) -> Cf_set.T.t -> unit
      val predicate : (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> bool
      val fold : ('-> Cf_set.T.Element.t -> 'a) -> '-> Cf_set.T.t -> 'a
      val filter : (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> Cf_set.T.t
      val partition :
        (Cf_set.T.Element.t -> bool) -> Cf_set.T.t -> Cf_set.T.t * Cf_set.T.t
    end
end