#### astring

## String sets

`include Set.S with type elt := string and type t := set`

`val empty : set`

The empty set.

`val is_empty : set -> bool`

Test whether a set is empty or not.

`val mem : string -> set -> bool`

`mem x s`

tests whether `x`

belongs to the set `s`

.

`add x s`

returns a set containing all elements of `s`

, plus `x`

. If `x`

was already in `s`

, `s`

is returned unchanged (the result of the function is then physically equal to `s`

).

`val singleton : string -> set`

`singleton x`

returns the one-element set containing only `x`

.

`remove x s`

returns a set containing all elements of `s`

, except `x`

. If `x`

was not in `s`

, `s`

is returned unchanged (the result of the function is then physically equal to `s`

).

Total ordering between sets. Can be used as the ordering function for doing sets of sets.

`equal s1 s2`

tests whether the sets `s1`

and `s2`

are equal, that is, contain equal elements.

`val iter : ( string -> unit ) -> set -> unit`

`iter f s`

applies `f`

in turn to all elements of `s`

. The elements of `s`

are presented to `f`

in increasing order with respect to the ordering over the type of the elements.

`map f s`

is the set whose elements are `f a0`

,`f a1`

... ```
f
aN
```

, where `a0`

,`a1`

...`aN`

are the elements of `s`

.

The elements are passed to `f`

in increasing order with respect to the ordering over the type of the elements.

If no element of `s`

is changed by `f`

, `s`

is returned unchanged. (If each output of `f`

is physically equal to its input, the returned set is physically equal to `s`

.)

`val fold : ( string -> 'a -> 'a ) -> set -> 'a -> 'a`

`fold f s a`

computes `(f xN ... (f x2 (f x1 a))...)`

, where `x1 ... xN`

are the elements of `s`

, in increasing order.

`val for_all : ( string -> bool ) -> set -> bool`

`for_all p s`

checks if all elements of the set satisfy the predicate `p`

.

`val exists : ( string -> bool ) -> set -> bool`

`exists p s`

checks if at least one element of the set satisfies the predicate `p`

.

`filter p s`

returns the set of all elements in `s`

that satisfy predicate `p`

. If `p`

satisfies every element in `s`

, `s`

is returned unchanged (the result of the function is then physically equal to `s`

).

`partition p s`

returns a pair of sets `(s1, s2)`

, where `s1`

is the set of all the elements of `s`

that satisfy the predicate `p`

, and `s2`

is the set of all the elements of `s`

that do not satisfy `p`

.

`val cardinal : set -> int`

Return the number of elements of a set.

`val elements : set -> string list`

Return the list of all elements of the given set. The returned list is sorted in increasing order with respect to the ordering `Ord.compare`

, where `Ord`

is the argument given to `Set`

.Make.

`val min_elt_opt : set -> string option`

Return the smallest element of the given set (with respect to the `Ord.compare`

ordering), or `None`

if the set is empty.

`val max_elt_opt : set -> string option`

Same as `Set`

.S.min_elt_opt, but returns the largest element of the given set.

`val choose_opt : set -> string option`

Return one element of the given set, or `None`

if the set is empty. Which element is chosen is unspecified, but equal elements will be chosen for equal sets.

`split x s`

returns a triple `(l, present, r)`

, where `l`

is the set of elements of `s`

that are strictly less than `x`

; `r`

is the set of elements of `s`

that are strictly greater than `x`

; `present`

is `false`

if `s`

contains no element equal to `x`

, or `true`

if `s`

contains an element equal to `x`

.

`val find_opt : string -> set -> string option`

`find_opt x s`

returns the element of `s`

equal to `x`

(according to `Ord.compare`

), or `None`

if no such element exists.

`val find_first : ( string -> bool ) -> set -> string`

`find_first f s`

, where `f`

is a monotonically increasing function, returns the lowest element `e`

of `s`

such that `f e`

, or raises `Not_found`

if no such element exists.

For example, `find_first (fun e -> Ord.compare e x >= 0) s`

will return the first element `e`

of `s`

where `Ord.compare e x >= 0`

(intuitively: `e >= x`

), or raise `Not_found`

if `x`

is greater than any element of `s`

.

`val find_first_opt : ( string -> bool ) -> set -> string option`

`find_first_opt f s`

, where `f`

is a monotonically increasing function, returns an option containing the lowest element `e`

of `s`

such that `f e`

, or `None`

if no such element exists.

`val find_last : ( string -> bool ) -> set -> string`

`find_last f s`

, where `f`

is a monotonically decreasing function, returns the highest element `e`

of `s`

such that `f e`

, or raises `Not_found`

if no such element exists.

`val find_last_opt : ( string -> bool ) -> set -> string option`

`find_last_opt f s`

, where `f`

is a monotonically decreasing function, returns an option containing the highest element `e`

of `s`

such that `f e`

, or `None`

if no such element exists.

`type t = set`

`val min_elt : set -> string option`

Exception safe `Set`

.S.min_elt.

`val max_elt : set -> string option`

Exception safe `Set`

.S.max_elt.

`val choose : set -> string option`

Exception safe `Set`

.S.choose.

`val find : string -> set -> string option`

Exception safe `Set`

.S.find.

`val get : string -> set -> string`

`get`

is like `Set`

.S.find but

`val of_list : string list -> set`

`of_list ss`

is a set from the list `ss`

.

`val of_stdlib_set : Set.Make(String).t -> set`

`of_stdlib_set s`

is a set from the stdlib-compatible set `s`

.

`val to_stdlib_set : set -> Set.Make(String).t`

`to_stdlib_set s`

is the stdlib-compatible set equivalent to `s`

.

```
val pp :
?sep:( Format.formatter -> unit -> unit ) ->
( Format.formatter -> string -> unit ) ->
Format.formatter ->
set ->
unit
```

`pp ~sep pp_elt ppf ss`

formats the elements of `ss`

on `ppf`

. Each element is formatted with `pp_elt`

and elements are separated by `~sep`

(defaults to `Format.pp_print_cut`

. If the set is empty leaves `ppf`

untouched.

`val dump : Format.formatter -> set -> unit`

`dump ppf ss`

prints an unspecified representation of `ss`

on `ppf`

.