set: sets over ordered types

This module implements the set data structure, given a total ordering
function over the set elements. All operations over sets
are purely applicative (no sideeffects).
The implementation uses balanced binary trees, and is therefore
reasonably efficient: insertion and membership take time
logarithmic in the size of the set, for instance.
type 'a t

The type of sets containing elements of type 'a.
value empty: ('a > 'a > int) > 'a t

The empty set.
The argument is a total ordering function over the set elements.
This is a twoargument function f such that
f e1 e2 is zero if the elements e1 and e2 are equal,
f e1 e2 is strictly negative if e1 is smaller than e2,
and f e1 e2 is strictly positive if e1 is greater than e2.
Examples: a suitable ordering function for type int
is prefix . You can also use the generic structural comparison
function eq__compare.
value is_empty: 'a t > bool

Test whether a set is empty or not.
value mem: 'a > 'a t > bool

mem x s tests whether x belongs to the set s.
value add: 'a > 'a t > 'a t

add x s returns a set containing all elements of s,
plus x. If x was already in s, s is returned unchanged.
value remove: 'a > 'a t > 'a t

remove x s returns a set containing all elements of s,
except x. If x was not in s, s is returned unchanged.
value union: 'a t > 'a t > 'a t
value inter: 'a t > 'a t > 'a t
value diff: 'a t > 'a t > 'a t

Union, intersection and set difference.
value equal: 'a t > 'a t > bool

equal s1 s2 tests whether the sets s1 and s2 are
equal, that is, contain the same elements.
value compare: 'a t > 'a t > int

Total ordering between sets. Can be used as the ordering function
for doing sets of sets.
value elements: 'a t > 'a list

Return the list of all elements of the given set.
The elements appear in the list in some nonspecified order.
value iter: ('a > unit) > 'a t > unit

iter f s applies f in turn to all elements of s, and
discards the results. The elements of s are presented to f
in a nonspecified order.
value fold: ('a > 'b > 'b) > 'a t > 'b > 'b

fold f s a computes (f xN ... (f x2 (f x1 a))...),
where x1 ... xN are the elements of s.
The order in which elements of s are presented to f is
not specified.
value choose: 'a t > 'a

Return one element of the given set, or raise Not_found if
the set is empty. Which element is chosen is not specified,
but equal elements will be chosen for equal sets.