UNPKG

mezzanine

Version:

Fantasy land union types with pattern matching

478 lines (105 loc) 72.5 kB
'use strict';Object.defineProperty(exports, "__esModule", { value: true });exports. cons = cons;exports. append = append;exports. drop = drop;exports. tail = tail;exports. copy = copy;exports. concat = concat;exports. reverse = reverse;exports. map = map;exports. forEach = forEach;exports. transducer = transducer;exports. reduce = reduce;exports. replace = replace;exports. remove = remove;exports. removeAll = removeAll;exports. findIndex = findIndex;exports. isArrayLike = isArrayLike; /** * cons :: a -> [a] -> [a] * * a with x prepended * * @export * @template T * @param {T} x * @param {T[]} a * @returns {T[]} */function cons(x, a) {var l = a.length;var b = new Array(l + 1);b[0] = x;for (var i = 0; i < l; ++i) {b[i + 1] = a[i];}return b;} /** * append :: a -> [a] -> [a] * * a with x appended * * @export * @template T * @param {T} x * @param {T[]} a * @returns {T[]} */function append(x, a) {var l = a.length;var b = new Array(l + 1);for (var i = 0; i < l; ++i) {b[i] = a[i];}b[l] = x;return b;} /** * drop :: Int -> [a] -> [a] * * drop first n elements * * @export * @template T * @param {number} n * @param {T[]} a * @returns {T[]} */function drop(n, a) {if (n < 0) {throw new TypeError('n must be >= 0');}var l = a.length;if (n === 0 || l === 0) {return a;}if (n >= l) {return [];}return unsafeDrop(n, a, l - n);} /** * unsafeDrop :: Int -> [a] -> Int -> [a] * * Internal helper for drop * * @template T * @param {number} n * @param {T[]} a * @param {number} l * @returns {T[]} */function unsafeDrop(n, a, l) {var b = new Array(l);for (var i = 0; i < l; ++i) {b[i] = a[n + i];}return b;} /** * tail :: [a] -> [a] * * drop head element * * @export * @template T * @param {T[]} a * @returns {T[]} */function tail(a) {return drop(1, a);} /** * copy :: [a] -> [a] * * duplicate a (shallow duplication) * * @export * @template T * @param {T[]} a * @returns {T[]} */function copy(a) {var l = a.length;var b = new Array(l);for (var i = 0; i < l; ++i) {b[i] = a[i];}return b;} /** * concat :: [[a]] -> [a] * * @export * @template T * @param {T[][]} a * @returns {T[]} */function concat(a) {var lnMain = a.length;var lnTotal = 0;var lengthList = Array(lnMain);for (var i = 0; i < lnMain; ++i) {lnTotal += lengthList[i] = a[i].length;}var b = new Array(lnTotal);var index = 0;for (var _i = 0; _i < lnMain; ++_i) {for (var j = 0, ln = lengthList[_i], list = a[_i]; j < ln; ++j) {b[index++] = list[j];}}return b;} /** * reverse :: [a] -> [a] * * @export * @template T * @param {T[]} a * @returns {T[]} */function reverse(a) {var l = a.length;var last = l - 1;var b = new Array(l);for (var i = 0; i < l; ++i) {b[i] = a[last - i];}return b;} /** * map :: (a -> b) -> [a] -> [b] * transform each element with f * * @export * @template T * @template S * @param {(val: T) => S} f * @param {T[]} a * @returns {S[]} */function map(f, a) {var l = a.length;var b = new Array(l);for (var i = 0; i < l; ++i) {b[i] = f(a[i]);}return b;}function forEach(l, f, a) {var i = l;while (i--) {f(a[i]);}}function applyList(l, a, x) {var result = x;var currentFn = void 0;var current = x;for (var i = 0; i < l; ++i) {currentFn = a[i]; //$FlowIssue result = currentFn(current);current = result;} //$FlowIssue return result;}function internalTransducer(fList, a, ln, fln) {var result = Array(ln);var current = void 0;for (var i = 0; i < ln; ++i) {current = a[i];result[i] = applyList(fln, fList, current);}return result;} //$FlowIssue function transducer(fList, a) {var ln = a.length;var fln = fList.length;if (ln === 0) return [];if (fln === 0) return copy(a);return internalTransducer(fList, a, ln, fln);} /** * reduce :: (a -> b -> a) -> a -> [b] -> a * * accumulate via left-fold