mezzanine
Version:
Fantasy land union types with pattern matching
478 lines (105 loc) • 72.5 kB
JavaScript
'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