UNPKG

functionalscript

Version:

FunctionalScript is a purely functional subset of JavaScript

37 lines (36 loc) 1.11 kB
/** * 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 = [];