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