sig
  type 'a t
  val t_of_sexp : (Sexplib.Sexp.t -> 'a) -> Sexplib.Sexp.t -> 'PSet.t
  val sexp_of_t : ('-> Sexplib.Sexp.t) -> 'PSet.t -> Sexplib.Sexp.t
  val empty : 'PSet.t
  val is_empty : 'PSet.t -> bool
  val mem : 'PSet.t -> '-> bool
  val add : 'PSet.t -> '-> 'PSet.t
  val singleton : '-> 'PSet.t
  val remove : 'PSet.t -> '-> 'PSet.t
  val union : 'PSet.t -> 'PSet.t -> 'PSet.t
  val inter : 'PSet.t -> 'PSet.t -> 'PSet.t
  val diff : 'PSet.t -> 'PSet.t -> 'PSet.t
  val compare : 'PSet.t -> 'PSet.t -> int
  val equal : 'PSet.t -> 'PSet.t -> bool
  val subset : 'PSet.t -> 'PSet.t -> bool
  val iter : f:('-> unit) -> 'PSet.t -> unit
  val fold : f:('-> '-> 'b) -> 'PSet.t -> init:'-> 'b
  val for_all : f:('-> bool) -> 'PSet.t -> bool
  val exists : f:('-> bool) -> 'PSet.t -> bool
  val filter : f:('-> bool) -> 'PSet.t -> 'PSet.t
  val filter_map : f:('-> 'b option) -> 'PSet.t -> 'PSet.t
  val filter_opt : 'a option PSet.t -> 'PSet.t
  val partition : f:('-> bool) -> 'PSet.t -> 'PSet.t * 'PSet.t
  val cardinal : 'PSet.t -> int
  val elements : 'PSet.t -> 'a list
  val min_elt : 'PSet.t -> 'a option
  val min_elt_exn : 'PSet.t -> 'a
  val max_elt : 'PSet.t -> 'a option
  val max_elt_exn : 'PSet.t -> 'a
  val choose : 'PSet.t -> 'a option
  val choose_exn : 'PSet.t -> 'a
  val of_list : 'a list -> 'PSet.t
  val to_list : 'PSet.t -> 'a list
  val of_array : 'a array -> 'PSet.t
  val to_array : 'PSet.t -> 'a array
  val map : f:('-> 'b) -> 'PSet.t -> 'PSet.t
  val subsets : 'PSet.t -> int -> 'PSet.t PSet.t
  val split : 'PSet.t -> '-> 'PSet.t * bool * 'PSet.t
  val group_by : 'PSet.t -> equiv:('-> '-> bool) -> 'PSet.t list
end