You are currently looking at the < v8.2.0 docs (Reason v3.6 syntax edition). You can find the latest API docs here.
(These docs cover all versions between v3 to v8 and are equivalent to the old BuckleScript docs before the rebrand)
HashSet
A mutable Hash set which allows customized hash
behavior.
All data are parameterized by not its only type but also a unique identity in the time of initialization, so that two HashSets of ints initialized with different hash functions will have different type.
REtype t = int;
module I0 = (
val Belt.Id.hashableU(
~hash=(. a: t) => a land 65535,
~eq=(. a, b) => a == b,
)
);
let s0 = Belt.HashSet.make(~id=(module I0), ~hintSize=40);
module I1 = (
val Belt.Id.hashableU(
~hash=(. a: t) => a land 255,
~eq=(. a, b) => a == b,
)
);
let s1 = Belt.HashSet.make(~id=(module I1), ~hintSize=40);
Belt.HashSet.add(s1, 0);
Belt.HashSet.add(s1, 1);
The invariant must be held: for two elements who are equal, their hashed value should be the same.
Here the compiler would infer s0
and s1
having different type so that it would not mix.
RElet s0: t(int, I0.identity);
let s1: t(int, I1.identity);
We can add elements to the collection (see last two lines in the example above). Since this is an mutable data structure, s1
will contain two pairs.
t
REtype t('a, 'id);
id
REtype id('a, 'id) = BeltId.hashable('a, 'id);
make
RElet make: (~hintSize: int, ~id: id('a, 'id)) => t('a, 'id);
clear
RElet clear: t('a, 'id) => unit;
isEmpty
RElet isEmpty: t('a, 'b) => bool;
add
RElet add: (t('a, 'id), 'a) => unit;
copy
RElet copy: t('a, 'id) => t('a, 'id);
has
RElet has: (t('a, 'id), 'a) => bool;
remove
RElet remove: (t('a, 'id), 'a) => unit;
forEachU
RElet forEachU: (t('a, 'id), [@bs] ('a => unit)) => unit;
forEach
RElet forEach: (t('a, 'id), 'a => unit) => unit;
Order unspecified.
reduceU
RElet reduceU: (t('a, 'id), 'c, [@bs] (('c, 'a) => 'c)) => 'c;
reduce
RElet reduce: (t('a, 'id), 'c, ('c, 'a) => 'c) => 'c;
Order unspecified.
size
RElet size: t('a, 'id) => int;
logStats
RElet logStats: t('a, 'b) => unit;
toArray
RElet toArray: t('a, 'id) => array('a);
fromArray
RElet fromArray: (array('a), ~id: id('a, 'id)) => t('a, 'id);
mergeMany
RElet mergeMany: (t('a, 'id), array('a)) => unit;
getBucketHistogram
RElet getBucketHistogram: t('a, 'b) => array(int);