functionalscript
Version:
FunctionalScript is a purely functional subset of JavaScript
37 lines (36 loc) • 1.11 kB
JavaScript
/**
* JavaScript immutable arrays.
*
* @module
*/
import { map } from "../nullable/module.f.js";
export const isArray2 = (a) => a.length === 2;
const uncheckTail = (a) => a.slice(1);
const uncheckHead = (a) => a.slice(0, -1);
export const at = (i) => (a) => {
const r = a[i];
return r === undefined ? null : r;
};
export const first = at(0);
export const last = (a) => at(a.length - 1)(a);
export const tail = (a) => a.length === 0 ? null : uncheckTail(a);
export const splitFirst = (a) => {
const split = (first) => [first, uncheckTail(a)];
return map(split)(first(a));
};
export const head = (a) => a.length === 0 ? null : uncheckHead(a);
export const splitLast = (a) => {
const lastA = last(a);
if (lastA === null) {
return null;
}
return [uncheckHead(a), lastA];
};
/**
* An empty immutable array.
*
* Two JavaScript empty arrays are different and has to have two different values.
* Usually, it requires memory allocation. If we use the same an empty array everywhere,
* we may minimize memory a number of memory allocations.
*/
export const empty = [];