API / JavaScript / Belt / Range

Range

A small utility module to provide inclusive range operations for [start, finish]. Internally it is relying on loops instead of creating new arrays, which makes it pretty performant and memory friendly.

let forEachU: (int, int, [@bs] (int => unit)) => unit;
let forEach: (int, int, int => unit) => unit;

forEach(start, finish, action);

equivalent to Belt.Array.(forEach(range(start, finish), action));

RE
Belt.Range.forEach(0, 4, (i) => Js.log(i)); /** * prints: * 0 * 1 * 2 * 3 * 4 */
let everyU: (int, int, [@bs] (int => bool)) => bool;
let every: (int, int, int => bool) => bool;

every(start, finish, p);

equivalent to Belt.Array.(every(range(start, finish), p));

RE
Belt.Range.every(0, 4, (i) => i < 5); /* true */ Belt.Range.every(0, 4, (i) => i < 4); /* false */
let everyByU: (int, int, ~step: int, [@bs] (int => bool)) => bool;
let everyBy: (int, int, ~step: int, int => bool) => bool;

everyBy(start, finish, ~step, p);

See Belt_Array.rangeBy

equivalent to Belt.Array.(every(rangeBy(start, finish, ~step), p));

RE
Belt.Range.everyBy(0, 4, ~step=1, (i) => i mod 2 === 0); /* false */ Belt.Range.everyBy(0, 4, ~step=2, (i) => i mod 2 === 0); /* true */
let someU: (int, int, [@bs] (int => bool)) => bool;
let some: (int, int, int => bool) => bool;

some(start, finish, p);

equivalent to Belt.Array.(some(range(start, finish), p));

RE
Belt.Range.some(0, 4, (i) => i > 5); /* false */ Belt.Range.some(0, 4, (i) => i > 2); /* true */
let someByU: (int, int, ~step: int, [@bs] (int => bool)) => bool;
let someBy: (int, int, ~step: int, int => bool) => bool;

someBy(start, finish, ~step, p);

See Belt_Array.rangeBy

equivalent to Belt.Array.(some(rangeBy(start, finish, ~step), p));

RE
Belt.Range.someBy(1, 5, ~step=2, (i) => i mod 2 === 0); /* false */ Belt.Range.someBy(0, 4, ~step=2, (i) => i mod 2 === 0); /* true */