Module Set.Dict
This module seprate identity from data, it is a bit more verboe but slightly more efficient due to the fact that there is no need to pack identity and data back after each operation
type t('value, 'identity);type cmp('value, 'id);let empty: t('value, 'id);let fromArray: array('value) => cmp:cmp('value, 'id) => t('value, 'id);let fromSortedArrayUnsafe: array('value) => t('value, 'id);let isEmpty: t(_, _) => bool;let has: t('value, 'id) => 'value => cmp:cmp('value, 'id) => bool;let add: t('value, 'id) => 'value => cmp:cmp('value, 'id) => t('value, 'id);add s x If x was already in s, s is returned unchanged.
let mergeMany:
t('value, 'id) =>
array('value) =>
cmp:cmp('value, 'id) =>
t('value, 'id);let remove: t('value, 'id) => 'value => cmp:cmp('value, 'id) => t('value, 'id);remove m x If x was not in m, m is returned reference unchanged.
let removeMany:
t('value, 'id) =>
array('value) =>
cmp:cmp('value, 'id) =>
t('value, 'id);let union:
t('value, 'id) =>
t('value, 'id) =>
cmp:cmp('value, 'id) =>
t('value, 'id);let intersect:
t('value, 'id) =>
t('value, 'id) =>
cmp:cmp('value, 'id) =>
t('value, 'id);let diff:
t('value, 'id) =>
t('value, 'id) =>
cmp:cmp('value, 'id) =>
t('value, 'id);let subset: t('value, 'id) => t('value, 'id) => cmp:cmp('value, 'id) => bool;subset s1 s2 tests whether the set s1 is a subset of the set s2.
let cmp: t('value, 'id) => t('value, 'id) => cmp:cmp('value, 'id) => int;Total ordering between sets. Can be used as the ordering function for doing sets of sets.
let eq: t('value, 'id) => t('value, 'id) => cmp:cmp('value, 'id) => bool;eq s1 s2 tests whether the sets s1 and s2 are equal, that is, contain equal elements.
let forEachU: t('value, 'id) => Js.Fn.arity1(('value => unit)) => unit;let forEach: t('value, 'id) => ('value => unit) => unit;forEach s f applies f in turn to all elements of s. In increasing order
let reduceU: t('value, 'id) => 'a => Js.Fn.arity2(('a => 'value => 'a)) => 'a;let reduce: t('value, 'id) => 'a => ('a => 'value => 'a) => 'a;Iterate in increasing order.
let everyU: t('value, 'id) => Js.Fn.arity1(('value => bool)) => bool;let every: t('value, 'id) => ('value => bool) => bool;every p s checks if all elements of the set satisfy the predicate p. Order unspecified.
let someU: t('value, 'id) => Js.Fn.arity1(('value => bool)) => bool;let some: t('value, 'id) => ('value => bool) => bool;some p s checks if at least one element of the set satisfies the predicate p. Oder unspecified.
let keepU: t('value, 'id) => Js.Fn.arity1(('value => bool)) => t('value, 'id);let keep: t('value, 'id) => ('value => bool) => t('value, 'id);keep p s returns the set of all elements in s that satisfy predicate p.
let partitionU:
t('value, 'id) =>
Js.Fn.arity1(('value => bool)) =>
(t('value, 'id), t('value, 'id));let partition:
t('value, 'id) =>
('value => bool) =>
(t('value, 'id), t('value, 'id));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.
let size: t('value, 'id) => int;let toList: t('value, 'id) => list('value);In increasing order
let toArray: t('value, 'id) => array('value);let minimum: t('value, 'id) => option('value);let minUndefined: t('value, 'id) => Js.undefined('value);let maximum: t('value, 'id) => option('value);let maxUndefined: t('value, 'id) => Js.undefined('value);let get: t('value, 'id) => 'value => cmp:cmp('value, 'id) => option('value);let getUndefined:
t('value, 'id) =>
'value =>
cmp:cmp('value, 'id) =>
Js.undefined('value);let getExn: t('value, 'id) => 'value => cmp:cmp('value, 'id) => 'value;let split:
t('value, 'id) =>
'value =>
cmp:cmp('value, 'id) =>
((t('value, 'id), t('value, 'id)), bool);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.
let checkInvariantInternal: t(_, _) => unit;raise when invariant is not held