module type S = sig .. end
type elt;
type t;
let empty: t;
let is_empty: t => bool;
let mem: (elt, t) => bool;
let add: (elt, t) => t;
let singleton: elt => t;
let remove: (elt, t) => t;
let union: (t, t) => t;
let inter: (t, t) => t;
let diff: (t, t) => t;
let compare: (t, t) => int;
let equal: (t, t) => bool;
let subset: (t, t) => bool;
let iter: (~f: elt => unit, t) => unit;
let fold: (~f: (elt, 'a) => 'a, t, ~init: 'a) => 'a;
let for_all: (~f: elt => bool, t) => bool;
let exists: (~f: elt => bool, t) => bool;
let filter: (~f: elt => bool, t) => t;
let partition: (~f: elt => bool, t) => (t, t);
let cardinal: t => int;
let elements: t => list(elt);
let min_elt: t => elt;
let max_elt: t => elt;
let choose: t => elt;
let split: (elt, t) => (t, bool, t);
let find: (elt, t) => elt;
let of_list: list(elt) => t;