UNPKG

@mobily/ts-belt

Version:

🔧 Fast, modern, and practical utility library for FP in TypeScript.

2,001 lines (1,990 loc) • 43.8 kB
var __defProp = Object.defineProperty; var __markAsModule = (target) => __defProp(target, "__esModule", { value: true }); var __export = (target, all2) => { __markAsModule(target); for (var name in all2) __defProp(target, name, { get: all2[name], enumerable: true }); }; // src/Array/index.js __export(exports, { all: () => all, any: () => any, append: () => append, at: () => at, concat: () => concat2, concatMany: () => concatMany2, copy: () => copy, deepFlat: () => deepFlat, difference: () => difference, drop: () => drop, dropExactly: () => dropExactly, dropWhile: () => dropWhile, eq: () => eq, every: () => every, filter: () => filter, filterMap: () => filterMap, filterWithIndex: () => filterWithIndex, find: () => find, flat: () => flat, flatten: () => flatten, flip: () => flip, forEach: () => forEach, forEachWithIndex: () => forEachWithIndex, get: () => get3, getBy: () => getBy, getIndexBy: () => getIndexBy, getUndefined: () => getUndefined, getUnsafe: () => getUnsafe, groupBy: () => groupBy, head: () => head, includes: () => includes, init: () => init, initOrEmpty: () => initOrEmpty, insertAt: () => insertAt, intersection: () => intersection, intersperse: () => intersperse, isEmpty: () => isEmpty, isNotEmpty: () => isNotEmpty, join: () => join, keep: () => keep, keepMap: () => keepMap, keepWithIndex: () => keepWithIndex, last: () => last, length: () => length, make: () => make2, makeEmpty: () => makeEmpty, makeWithIndex: () => makeWithIndex, map: () => map, mapWithIndex: () => mapWithIndex, partition: () => partition, placeholder: () => placeholder, prepend: () => prepend, prependToAll: () => prependToAll, range: () => range2, rangeBy: () => rangeBy2, reduce: () => reduce, reduceReverse: () => reduceReverse, reduceWithIndex: () => reduceWithIndex, reject: () => reject, rejectWithIndex: () => rejectWithIndex, removeAt: () => removeAt, removeFirst: () => removeFirst, removeFirstBy: () => removeFirstBy, repeat: () => repeat, replaceAt: () => replaceAt, reverse: () => reverse2, shuffle: () => shuffle2, slice: () => slice2, sliceToEnd: () => sliceToEnd2, some: () => some2, sort: () => sort, sortBy: () => sortBy, splitAt: () => splitAt, splitEvery: () => splitEvery, swapAt: () => swapAt, tail: () => tail, tailOrEmpty: () => tailOrEmpty, take: () => take, takeExactly: () => takeExactly, takeWhile: () => takeWhile, tap: () => tap, toTuple: () => toTuple, uncons: () => uncons, union: () => union, uniq: () => uniq, uniqBy: () => uniqBy, unzip: () => unzip2, updateAt: () => updateAt, zip: () => zip2, zipWith: () => zipWith, zipWithIndex: () => zipWithIndex }); // node_modules/rescript/lib/es6/caml_option.js function some(x) { if (x === void 0) { return { BS_PRIVATE_NESTED_SOME_NONE: 0 }; } else if (x !== null && x.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return { BS_PRIVATE_NESTED_SOME_NONE: x.BS_PRIVATE_NESTED_SOME_NONE + 1 | 0 }; } else { return x; } } function valFromOption(x) { if (!(x !== null && x.BS_PRIVATE_NESTED_SOME_NONE !== void 0)) { return x; } var depth = x.BS_PRIVATE_NESTED_SOME_NONE; if (depth === 0) { return; } else { return { BS_PRIVATE_NESTED_SOME_NONE: depth - 1 | 0 }; } } // node_modules/rescript/lib/es6/js_dict.js function get(dict, k) { if (k in dict) { return some(dict[k]); } } // node_modules/rescript/lib/es6/caml.js function caml_int_compare(x, y) { if (x < y) { return -1; } else if (x === y) { return 0; } else { return 1; } } function caml_bool_compare(x, y) { if (x) { if (y) { return 0; } else { return 1; } } else if (y) { return -1; } else { return 0; } } function caml_string_compare(s1, s2) { if (s1 === s2) { return 0; } else if (s1 < s2) { return -1; } else { return 1; } } function caml_int_max(x, y) { if (x > y) { return x; } else { return y; } } // node_modules/rescript/lib/es6/caml_obj.js var for_in = function(o, foo) { for (var x in o) { foo(x); } }; function caml_compare(a, b) { if (a === b) { return 0; } var a_type = typeof a; var b_type = typeof b; switch (a_type) { case "boolean": if (b_type === "boolean") { return caml_bool_compare(a, b); } break; case "function": if (b_type === "function") { throw { RE_EXN_ID: "Invalid_argument", _1: "compare: functional value", Error: new Error() }; } break; case "number": if (b_type === "number") { return caml_int_compare(a, b); } break; case "string": if (b_type === "string") { return caml_string_compare(a, b); } else { return 1; } case "undefined": return -1; default: } switch (b_type) { case "string": return -1; case "undefined": return 1; default: if (a_type === "boolean") { return 1; } if (b_type === "boolean") { return -1; } if (a_type === "function") { return 1; } if (b_type === "function") { return -1; } if (a_type === "number") { if (b === null || b.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return 1; } else { return -1; } } if (b_type === "number") { if (a === null || a.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return -1; } else { return 1; } } if (a === null) { if (b.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return 1; } else { return -1; } } if (b === null) { if (a.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return -1; } else { return 1; } } if (a.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { if (b.BS_PRIVATE_NESTED_SOME_NONE !== void 0) { return aux_obj_compare(a, b); } else { return -1; } } var tag_a = a.TAG | 0; var tag_b = b.TAG | 0; if (tag_a === 248) { return caml_int_compare(a[1], b[1]); } if (tag_a === 251) { throw { RE_EXN_ID: "Invalid_argument", _1: "equal: abstract value", Error: new Error() }; } if (tag_a !== tag_b) { if (tag_a < tag_b) { return -1; } else { return 1; } } var len_a = a.length | 0; var len_b = b.length | 0; if (len_a === len_b) { if (Array.isArray(a)) { var _i = 0; while (true) { var i = _i; if (i === len_a) { return 0; } var res = caml_compare(a[i], b[i]); if (res !== 0) { return res; } _i = i + 1 | 0; continue; } ; } else if (a instanceof Date && b instanceof Date) { return a - b; } else { return aux_obj_compare(a, b); } } else if (len_a < len_b) { var _i$1 = 0; while (true) { var i$1 = _i$1; if (i$1 === len_a) { return -1; } var res$1 = caml_compare(a[i$1], b[i$1]); if (res$1 !== 0) { return res$1; } _i$1 = i$1 + 1 | 0; continue; } ; } else { var _i$2 = 0; while (true) { var i$2 = _i$2; if (i$2 === len_b) { return 1; } var res$2 = caml_compare(a[i$2], b[i$2]); if (res$2 !== 0) { return res$2; } _i$2 = i$2 + 1 | 0; continue; } ; } } } function aux_obj_compare(a, b) { var min_key_lhs = { contents: void 0 }; var min_key_rhs = { contents: void 0 }; var do_key = function(param, key) { var min_key = param[2]; var b2 = param[1]; if (!(!Object.prototype.hasOwnProperty.call(b2, key) || caml_compare(param[0][key], b2[key]) > 0)) { return; } var mk = min_key.contents; if (mk !== void 0 && key >= mk) { return; } else { min_key.contents = key; return; } }; var partial_arg = [ a, b, min_key_rhs ]; var do_key_a = function(param) { return do_key(partial_arg, param); }; var partial_arg$1 = [ b, a, min_key_lhs ]; var do_key_b = function(param) { return do_key(partial_arg$1, param); }; for_in(a, do_key_a); for_in(b, do_key_b); var match = min_key_lhs.contents; var match$1 = min_key_rhs.contents; if (match !== void 0) { if (match$1 !== void 0) { return caml_string_compare(match, match$1); } else { return -1; } } else if (match$1 !== void 0) { return 1; } else { return 0; } } function caml_equal(a, b) { if (a === b) { return true; } var a_type = typeof a; if (a_type === "string" || a_type === "number" || a_type === "boolean" || a_type === "undefined" || a === null) { return false; } var b_type = typeof b; if (a_type === "function" || b_type === "function") { throw { RE_EXN_ID: "Invalid_argument", _1: "equal: functional value", Error: new Error() }; } if (b_type === "number" || b_type === "undefined" || b === null) { return false; } var tag_a = a.TAG | 0; var tag_b = b.TAG | 0; if (tag_a === 248) { return a[1] === b[1]; } if (tag_a === 251) { throw { RE_EXN_ID: "Invalid_argument", _1: "equal: abstract value", Error: new Error() }; } if (tag_a !== tag_b) { return false; } var len_a = a.length | 0; var len_b = b.length | 0; if (len_a === len_b) { if (Array.isArray(a)) { var _i = 0; while (true) { var i = _i; if (i === len_a) { return true; } if (!caml_equal(a[i], b[i])) { return false; } _i = i + 1 | 0; continue; } ; } else if (a instanceof Date && b instanceof Date) { return !(a > b || a < b); } else { var result = { contents: true }; var do_key_a = function(key) { if (!Object.prototype.hasOwnProperty.call(b, key)) { result.contents = false; return; } }; var do_key_b = function(key) { if (!Object.prototype.hasOwnProperty.call(a, key) || !caml_equal(b[key], a[key])) { result.contents = false; return; } }; for_in(a, do_key_a); if (result.contents) { for_in(b, do_key_b); } return result.contents; } } else { return false; } } function caml_lessthan(a, b) { return caml_compare(a, b) < 0; } // node_modules/rescript/lib/es6/js_int.js var max = 2147483647; var min = -2147483648; // node_modules/rescript/lib/es6/js_math.js function floor_int(f) { if (f > max) { return max; } else if (f < min) { return min; } else { return Math.floor(f); } } function random_int(min2, max2) { return floor_int(Math.random() * (max2 - min2 | 0)) + min2 | 0; } // node_modules/rescript/lib/es6/belt_Array.js function get2(arr, i) { if (i >= 0 && i < arr.length) { return some(arr[i]); } } function getExn(arr, i) { if (!(i >= 0 && i < arr.length)) { throw { RE_EXN_ID: "Assert_failure", _1: [ "belt_Array.ml", 27, 4 ], Error: new Error() }; } return arr[i]; } function swapUnsafe(xs, i, j) { var tmp = xs[i]; xs[i] = xs[j]; xs[j] = tmp; } function shuffleInPlace(xs) { var len = xs.length; for (var i = 0; i < len; ++i) { swapUnsafe(xs, i, random_int(i, len)); } } function shuffle(xs) { var result = xs.slice(0); shuffleInPlace(result); return result; } function reverse(xs) { var len = xs.length; var result = new Array(len); for (var i = 0; i < len; ++i) { result[i] = xs[(len - 1 | 0) - i | 0]; } return result; } function make(l, f) { if (l <= 0) { return []; } var res = new Array(l); for (var i = 0; i < l; ++i) { res[i] = f; } return res; } function makeByU(l, f) { if (l <= 0) { return []; } var res = new Array(l); for (var i = 0; i < l; ++i) { res[i] = f(i); } return res; } function range(start, finish) { var cut = finish - start | 0; if (cut < 0) { return []; } var arr = new Array(cut + 1 | 0); for (var i = 0; i <= cut; ++i) { arr[i] = start + i | 0; } return arr; } function rangeBy(start, finish, step) { var cut = finish - start | 0; if (cut < 0 || step <= 0) { return []; } var nb = (cut / step | 0) + 1 | 0; var arr = new Array(nb); var cur = start; for (var i = 0; i < nb; ++i) { arr[i] = cur; cur = cur + step | 0; } return arr; } function zip(xs, ys) { var lenx = xs.length; var leny = ys.length; var len = lenx < leny ? lenx : leny; var s = new Array(len); for (var i = 0; i < len; ++i) { s[i] = [ xs[i], ys[i] ]; } return s; } function zipByU(xs, ys, f) { var lenx = xs.length; var leny = ys.length; var len = lenx < leny ? lenx : leny; var s = new Array(len); for (var i = 0; i < len; ++i) { s[i] = f(xs[i], ys[i]); } return s; } function concat(a1, a2) { var l1 = a1.length; var l2 = a2.length; var a1a2 = new Array(l1 + l2 | 0); for (var i = 0; i < l1; ++i) { a1a2[i] = a1[i]; } for (var i$1 = 0; i$1 < l2; ++i$1) { a1a2[l1 + i$1 | 0] = a2[i$1]; } return a1a2; } function concatMany(arrs) { var lenArrs = arrs.length; var totalLen = 0; for (var i = 0; i < lenArrs; ++i) { totalLen = totalLen + arrs[i].length | 0; } var result = new Array(totalLen); totalLen = 0; for (var j = 0; j < lenArrs; ++j) { var cur = arrs[j]; for (var k = 0, k_finish = cur.length; k < k_finish; ++k) { result[totalLen] = cur[k]; totalLen = totalLen + 1 | 0; } } return result; } function slice(a, offset, len) { if (len <= 0) { return []; } var lena = a.length; var ofs = offset < 0 ? caml_int_max(lena + offset | 0, 0) : offset; var hasLen = lena - ofs | 0; var copyLength = hasLen < len ? hasLen : len; if (copyLength <= 0) { return []; } var result = new Array(copyLength); for (var i = 0; i < copyLength; ++i) { result[i] = a[ofs + i | 0]; } return result; } function sliceToEnd(a, offset) { var lena = a.length; var ofs = offset < 0 ? caml_int_max(lena + offset | 0, 0) : offset; var len = lena - ofs | 0; var result = new Array(len); for (var i = 0; i < len; ++i) { result[i] = a[ofs + i | 0]; } return result; } function blitUnsafe(a1, srcofs1, a2, srcofs2, blitLength) { if (srcofs2 <= srcofs1) { for (var j = 0; j < blitLength; ++j) { a2[j + srcofs2 | 0] = a1[j + srcofs1 | 0]; } return; } for (var j$1 = blitLength - 1 | 0; j$1 >= 0; --j$1) { a2[j$1 + srcofs2 | 0] = a1[j$1 + srcofs1 | 0]; } } function forEachU(a, f) { for (var i = 0, i_finish = a.length; i < i_finish; ++i) { f(a[i]); } } function mapU(a, f) { var l = a.length; var r = new Array(l); for (var i = 0; i < l; ++i) { r[i] = f(a[i]); } return r; } function getByU(a, p) { var l = a.length; var i = 0; var r; while (r === void 0 && i < l) { var v = a[i]; if (p(v)) { r = some(v); } i = i + 1 | 0; } ; return r; } function getIndexByU(a, p) { var l = a.length; var i = 0; var r; while (r === void 0 && i < l) { var v = a[i]; if (p(v)) { r = i; } i = i + 1 | 0; } ; return r; } function keepMapU(a, f) { var l = a.length; var r = new Array(l); var j = 0; for (var i = 0; i < l; ++i) { var v = a[i]; var v$1 = f(v); if (v$1 !== void 0) { r[j] = valFromOption(v$1); j = j + 1 | 0; } } r.length = j; return r; } function forEachWithIndexU(a, f) { for (var i = 0, i_finish = a.length; i < i_finish; ++i) { f(i, a[i]); } } function mapWithIndexU(a, f) { var l = a.length; var r = new Array(l); for (var i = 0; i < l; ++i) { r[i] = f(i, a[i]); } return r; } function reduceU(a, x, f) { var r = x; for (var i = 0, i_finish = a.length; i < i_finish; ++i) { r = f(r, a[i]); } return r; } function reduceReverseU(a, x, f) { var r = x; for (var i = a.length - 1 | 0; i >= 0; --i) { r = f(r, a[i]); } return r; } function reduceWithIndexU(a, x, f) { var r = x; for (var i = 0, i_finish = a.length; i < i_finish; ++i) { r = f(r, a[i], i); } return r; } function everyU(arr, b) { var len = arr.length; var _i = 0; while (true) { var i = _i; if (i === len) { return true; } if (!b(arr[i])) { return false; } _i = i + 1 | 0; continue; } ; } function someU(arr, b) { var len = arr.length; var _i = 0; while (true) { var i = _i; if (i === len) { return false; } if (b(arr[i])) { return true; } _i = i + 1 | 0; continue; } ; } function everyAux2(arr1, arr2, _i, b, len) { while (true) { var i = _i; if (i === len) { return true; } if (!b(arr1[i], arr2[i])) { return false; } _i = i + 1 | 0; continue; } ; } function eqU(a, b, p) { var lena = a.length; var lenb = b.length; if (lena === lenb) { return everyAux2(a, b, 0, p, lena); } else { return false; } } function partitionU(a, f) { var l = a.length; var i = 0; var j = 0; var a1 = new Array(l); var a2 = new Array(l); for (var ii = 0; ii < l; ++ii) { var v = a[ii]; if (f(v)) { a1[i] = v; i = i + 1 | 0; } else { a2[j] = v; j = j + 1 | 0; } } a1.length = i; a2.length = j; return [ a1, a2 ]; } function unzip(a) { var l = a.length; var a1 = new Array(l); var a2 = new Array(l); for (var i = 0; i < l; ++i) { var match = a[i]; a1[i] = match[0]; a2[i] = match[1]; } return [ a1, a2 ]; } // node_modules/rescript/lib/es6/belt_SortArray.js function merge(src, src1ofs, src1len, src2, src2ofs, src2len, dst, dstofs, cmp) { var src1r = src1ofs + src1len | 0; var src2r = src2ofs + src2len | 0; var _i1 = src1ofs; var _s1 = src[src1ofs]; var _i2 = src2ofs; var _s2 = src2[src2ofs]; var _d = dstofs; while (true) { var d = _d; var s2 = _s2; var i2 = _i2; var s1 = _s1; var i1 = _i1; if (cmp(s1, s2) <= 0) { dst[d] = s1; var i1$1 = i1 + 1 | 0; if (i1$1 >= src1r) { return blitUnsafe(src2, i2, dst, d + 1 | 0, src2r - i2 | 0); } _d = d + 1 | 0; _s1 = src[i1$1]; _i1 = i1$1; continue; } dst[d] = s2; var i2$1 = i2 + 1 | 0; if (i2$1 >= src2r) { return blitUnsafe(src, i1, dst, d + 1 | 0, src1r - i1 | 0); } _d = d + 1 | 0; _s2 = src2[i2$1]; _i2 = i2$1; continue; } ; } function insertionSort(src, srcofs, dst, dstofs, len, cmp) { for (var i = 0; i < len; ++i) { var e = src[srcofs + i | 0]; var j = (dstofs + i | 0) - 1 | 0; while (j >= dstofs && cmp(dst[j], e) > 0) { dst[j + 1 | 0] = dst[j]; j = j - 1 | 0; } ; dst[j + 1 | 0] = e; } } function sortTo(src, srcofs, dst, dstofs, len, cmp) { if (len <= 5) { return insertionSort(src, srcofs, dst, dstofs, len, cmp); } var l1 = len / 2 | 0; var l2 = len - l1 | 0; sortTo(src, srcofs + l1 | 0, dst, dstofs + l1 | 0, l2, cmp); sortTo(src, srcofs, src, srcofs + l2 | 0, l1, cmp); return merge(src, srcofs + l2 | 0, l1, dst, dstofs + l1 | 0, l2, dst, dstofs, cmp); } function stableSortInPlaceByU(a, cmp) { var l = a.length; if (l <= 5) { return insertionSort(a, 0, a, 0, l, cmp); } var l1 = l / 2 | 0; var l2 = l - l1 | 0; var t = new Array(l2); sortTo(a, l1, t, 0, l2, cmp); sortTo(a, 0, a, l2, l1, cmp); return merge(a, l2, l1, t, 0, l2, a, 0, cmp); } function stableSortByU(a, cmp) { var b = a.slice(0); stableSortInPlaceByU(b, cmp); return b; } // src/Array/Array.bs.js function placeholder(param) { } function makeEmpty(param) { return []; } var _makeWithIndex = makeByU; function makeWithIndex() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _makeWithIndex(data, args[0]); }; } return _makeWithIndex(arguments[0], arguments[1]); } var _make = make; function make2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _make(data, args[0]); }; } return _make(arguments[0], arguments[1]); } var _repeat = make; function repeat() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _repeat(data, args[0]); }; } return _repeat(arguments[0], arguments[1]); } function length(xs) { return xs.length; } function isEmpty(xs) { return xs.length === 0; } function isNotEmpty(xs) { return xs.length !== 0; } var reverse2 = reverse; function _append(xs, element) { return concat(xs, [element]); } function append() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _append(data, args[0]); }; } return _append(arguments[0], arguments[1]); } function _prepend(xs, element) { return concat([element], xs); } function prepend() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _prepend(data, args[0]); }; } return _prepend(arguments[0], arguments[1]); } function _prependToAll(xs, delimiter) { return reduceU(xs, [], function(acc, value) { return concat(acc, [ delimiter, value ]); }); } function prependToAll() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _prependToAll(data, args[0]); }; } return _prependToAll(arguments[0], arguments[1]); } function _intersperse(xs, delimiter) { return reduceWithIndexU(xs, [], function(acc, value, index) { if ((xs.length - 1 | 0) === index) { acc.push(value); } else { acc.push(value, delimiter); } return acc; }); } function intersperse() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _intersperse(data, args[0]); }; } return _intersperse(arguments[0], arguments[1]); } var _get = get2; function get3() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _get(data, args[0]); }; } return _get(arguments[0], arguments[1]); } var _at = get2; function at() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _at(data, args[0]); }; } return _at(arguments[0], arguments[1]); } function _getUnsafe(xs, index) { return xs[index]; } function getUnsafe() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _getUnsafe(data, args[0]); }; } return _getUnsafe(arguments[0], arguments[1]); } function _getUndefined(xs, index) { return xs[index]; } function getUndefined() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _getUndefined(data, args[0]); }; } return _getUndefined(arguments[0], arguments[1]); } var _getBy = getByU; function getBy() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _getBy(data, args[0]); }; } return _getBy(arguments[0], arguments[1]); } var _find = getByU; function find() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _find(data, args[0]); }; } return _find(arguments[0], arguments[1]); } function head(xs) { return get2(xs, 0); } function last(xs) { var l = xs.length; if (l === 0) { return; } else { return get2(xs, l - 1 | 0); } } function tail(xs) { var l = xs.length; if (l === 1) { return []; } if (l === 0) { return; } var xs$1 = sliceToEnd(xs, 1); if (xs$1.length !== 0) { return xs$1; } } function tailOrEmpty(xs) { var xs$1 = tail(xs); if (xs$1 !== void 0) { return xs$1; } else { return []; } } function init(xs) { var l = xs.length; if (l === 0) { return; } else { return slice(xs, 0, l - 1 | 0); } } function initOrEmpty(xs) { var xs$1 = init(xs); if (xs$1 !== void 0) { return xs$1; } else { return []; } } function _take(xs, n) { var l = xs.length; var len = n < 0 ? 0 : l < n ? l : n; return slice(xs, 0, len); } function take() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _take(data, args[0]); }; } return _take(arguments[0], arguments[1]); } function _takeExactly(xs, n) { if (n < 0 || n > xs.length) { return; } else { return slice(xs, 0, n); } } function takeExactly() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _takeExactly(data, args[0]); }; } return _takeExactly(arguments[0], arguments[1]); } function _takeWhile(xs, predicateFn) { return reduceU(xs, [], function(acc, element) { if (predicateFn(element)) { acc.push(element); } return acc; }); } function takeWhile() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _takeWhile(data, args[0]); }; } return _takeWhile(arguments[0], arguments[1]); } function _drop(xs, n) { var l = xs.length; var start = n < 0 ? 0 : l < n ? l : n; return sliceToEnd(xs, start); } function drop() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _drop(data, args[0]); }; } return _drop(arguments[0], arguments[1]); } function _dropExactly(xs, n) { if (n < 0 || n > xs.length) { return; } else { return sliceToEnd(xs, n); } } function dropExactly() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _dropExactly(data, args[0]); }; } return _dropExactly(arguments[0], arguments[1]); } function _dropWhile(xs, predicateFn) { return reduceU(xs, [], function(acc, element) { if (!predicateFn(element)) { acc.push(element); } return acc; }); } function dropWhile() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _dropWhile(data, args[0]); }; } return _dropWhile(arguments[0], arguments[1]); } function uncons(xs) { if (xs.length !== 0) { return [ getExn(xs, 0), sliceToEnd(xs, 1) ]; } } function _map(xs, mapFn) { return mapU(xs, mapFn); } function map() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _map(data, args[0]); }; } return _map(arguments[0], arguments[1]); } var _mapWithIndex = mapWithIndexU; function mapWithIndex() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _mapWithIndex(data, args[0]); }; } return _mapWithIndex(arguments[0], arguments[1]); } function _filter(xs, predicateFn) { var index = 0; var arr = []; while (index < xs.length) { var value = xs[index]; if (predicateFn(value)) { arr.push(value); } index = index + 1 | 0; } ; return arr; } function filter() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _filter(data, args[0]); }; } return _filter(arguments[0], arguments[1]); } var keep = filter; function _filterWithIndex(xs, predicateFn) { var index = 0; var arr = []; while (index < xs.length) { var value = xs[index]; if (predicateFn(index, value)) { arr.push(value); } index = index + 1 | 0; } ; return arr; } function filterWithIndex() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _filterWithIndex(data, args[0]); }; } return _filterWithIndex(arguments[0], arguments[1]); } var keepWithIndex = filterWithIndex; function _reject(xs, predicateFn) { return filter(xs, function(el) { return !predicateFn(el); }); } function reject() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _reject(data, args[0]); }; } return _reject(arguments[0], arguments[1]); } function _rejectWithIndex(xs, predicateFn) { return filterWithIndex(xs, function(index, el) { return !predicateFn(index, el); }); } function rejectWithIndex() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _rejectWithIndex(data, args[0]); }; } return _rejectWithIndex(arguments[0], arguments[1]); } var _reduce = reduceU; function reduce() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _reduce(data, args[0], args[1]); }; } return _reduce(arguments[0], arguments[1], arguments[2]); } var _reduceReverse = reduceReverseU; function reduceReverse() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _reduceReverse(data, args[0], args[1]); }; } return _reduceReverse(arguments[0], arguments[1], arguments[2]); } var _reduceWithIndex = reduceWithIndexU; function reduceWithIndex() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _reduceWithIndex(data, args[0], args[1]); }; } return _reduceWithIndex(arguments[0], arguments[1], arguments[2]); } function _splitAt(xs, offset) { if (offset < 0 || offset > xs.length) { return; } else { return [ slice(xs, 0, offset), sliceToEnd(xs, offset) ]; } } function splitAt() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _splitAt(data, args[0]); }; } return _splitAt(arguments[0], arguments[1]); } function _splitEvery(xs, size) { if (size < 1 || xs.length <= size) { return [xs]; } var offset = 0; var arr = []; while (offset < xs.length) { var len = offset + size | 0; arr.push(slice(xs, offset, size)); offset = len; } ; return arr; } function splitEvery() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _splitEvery(data, args[0]); }; } return _splitEvery(arguments[0], arguments[1]); } var shuffle2 = shuffle; var _partition = partitionU; function partition() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _partition(data, args[0]); }; } return _partition(arguments[0], arguments[1]); } var _concat = concat; function concat2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _concat(data, args[0]); }; } return _concat(arguments[0], arguments[1]); } var concatMany2 = concatMany; var _every = everyU; function every() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _every(data, args[0]); }; } return _every(arguments[0], arguments[1]); } var _some = someU; function some2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _some(data, args[0]); }; } return _some(arguments[0], arguments[1]); } var _slice = slice; function slice2() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _slice(data, args[0], args[1]); }; } return _slice(arguments[0], arguments[1], arguments[2]); } var _sliceToEnd = sliceToEnd; function sliceToEnd2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _sliceToEnd(data, args[0]); }; } return _sliceToEnd(arguments[0], arguments[1]); } var _eq = eqU; function eq() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _eq(data, args[0], args[1]); }; } return _eq(arguments[0], arguments[1], arguments[2]); } var _range = range; function range2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _range(data, args[0]); }; } return _range(arguments[0], arguments[1]); } var _rangeBy = rangeBy; function rangeBy2() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _rangeBy(data, args[0], args[1]); }; } return _rangeBy(arguments[0], arguments[1], arguments[2]); } function copy(xs) { return xs.slice(0); } var _zip = zip; function zip2() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _zip(data, args[0]); }; } return _zip(arguments[0], arguments[1]); } var _zipWith = zipByU; function zipWith() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _zipWith(data, args[0], args[1]); }; } return _zipWith(arguments[0], arguments[1], arguments[2]); } var unzip2 = unzip; function _replaceAt(xs, targetIndex, element) { return mapWithIndexU(xs, function(currentIndex, current) { if (currentIndex === targetIndex) { return element; } else { return current; } }); } function replaceAt() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _replaceAt(data, args[0], args[1]); }; } return _replaceAt(arguments[0], arguments[1], arguments[2]); } function _insertAt(xs, targetIndex, element) { var match = splitAt(xs, targetIndex); if (match !== void 0) { return concat(match[0], concat([element], match[1])); } else { return xs; } } function insertAt() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _insertAt(data, args[0], args[1]); }; } return _insertAt(arguments[0], arguments[1], arguments[2]); } function _updateAt(xs, targetIndex, fn) { return mapWithIndexU(xs, function(index, el) { if (index === targetIndex) { return fn(el); } else { return el; } }); } function updateAt() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _updateAt(data, args[0], args[1]); }; } return _updateAt(arguments[0], arguments[1], arguments[2]); } function _swapAt(xs, targetIndex, swapIndex) { var match = get2(xs, targetIndex); var match$1 = get2(xs, swapIndex); if (match === void 0) { return xs; } if (match$1 === void 0) { return xs; } var b = valFromOption(match$1); var a = valFromOption(match); return mapWithIndexU(xs, function(k, x) { if (targetIndex === k) { return b; } else if (swapIndex === k) { return a; } else { return x; } }); } function swapAt() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _swapAt(data, args[0], args[1]); }; } return _swapAt(arguments[0], arguments[1], arguments[2]); } function _removeAt(xs, targetIndex) { return filterWithIndex(xs, function(index, param) { return index !== targetIndex; }); } function removeAt() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _removeAt(data, args[0]); }; } return _removeAt(arguments[0], arguments[1]); } function _uniqBy(xs, uniqFn) { var index = 0; var arr = []; while (index < xs.length) { var value = xs[index]; var alreadyAdded = someU(arr, function(value2) { return function(x) { return caml_equal(uniqFn(x), uniqFn(value2)); }; }(value)); if (!alreadyAdded) { arr.push(value); } index = index + 1 | 0; } ; return arr; } function uniqBy() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _uniqBy(data, args[0]); }; } return _uniqBy(arguments[0], arguments[1]); } function uniq(xs) { return uniqBy(xs, function(element) { return element; }); } var _forEach = forEachU; function forEach() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _forEach(data, args[0]); }; } return _forEach(arguments[0], arguments[1]); } var _forEachWithIndex = forEachWithIndexU; function forEachWithIndex() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _forEachWithIndex(data, args[0]); }; } return _forEachWithIndex(arguments[0], arguments[1]); } var _getIndexBy = getIndexByU; function getIndexBy() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _getIndexBy(data, args[0]); }; } return _getIndexBy(arguments[0], arguments[1]); } function _includes(xs, value) { return someU(xs, function(x) { return caml_equal(x, value); }); } function includes() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _includes(data, args[0]); }; } return _includes(arguments[0], arguments[1]); } function _join(xs, delimiter) { return xs.join(delimiter); } function join() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _join(data, args[0]); }; } return _join(arguments[0], arguments[1]); } var _sort = stableSortByU; function sort() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _sort(data, args[0]); }; } return _sort(arguments[0], arguments[1]); } function _sortBy(xs, sortFn) { return stableSortByU(xs, function(a, b) { var a$1 = sortFn(a); var b$1 = sortFn(b); if (a$1 === b$1) { return 0; } else if (caml_lessthan(a$1, b$1)) { return -1; } else { return 1; } }); } function sortBy() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _sortBy(data, args[0]); }; } return _sortBy(arguments[0], arguments[1]); } function _groupBy(xs, groupFn) { return reduceU(xs, {}, function(acc, element) { var key = groupFn(element); var value = get(acc, key); if (value !== void 0) { value.push(element); } else { acc[key] = [element]; } return acc; }); } function groupBy() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _groupBy(data, args[0]); }; } return _groupBy(arguments[0], arguments[1]); } function flat(xs) { return reduceU(xs, [], function(acc, value) { if (Array.isArray(value)) { forEachU(value, function(element) { acc.push(element); }); } else { acc.push(value); } return acc; }); } function _flatten(xs, arr) { var index = 0; while (index < xs.length) { var value = xs[index]; if (Array.isArray(value)) { flatten(value, arr); } else { arr.push(value); } index = index + 1 | 0; } ; return arr; } function flatten() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _flatten(data, args[0]); }; } return _flatten(arguments[0], arguments[1]); } function deepFlat(xs) { return flatten(xs, []); } function toTuple(xs) { return xs; } function _tap(xs, fn) { forEachU(xs, fn); return xs; } function tap() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _tap(data, args[0]); }; } return _tap(arguments[0], arguments[1]); } function flip(xs) { return [ xs[1], xs[0] ]; } var _filterMap = keepMapU; function filterMap() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _filterMap(data, args[0]); }; } return _filterMap(arguments[0], arguments[1]); } var _keepMap = keepMapU; function keepMap() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _keepMap(data, args[0]); }; } return _keepMap(arguments[0], arguments[1]); } function _removeFirstBy(xs, value, predicateFn) { return reduceU(xs, [ false, [] ], function(acc, v) { var ys = acc[1]; if (acc[0]) { ys.push(v); return [ true, ys ]; } else if (predicateFn(v, value)) { return [ true, ys ]; } else { ys.push(v); return [ false, ys ]; } })[1]; } function removeFirstBy() { if (arguments.length === 2) { const args = arguments; return function fn(data) { return _removeFirstBy(data, args[0], args[1]); }; } return _removeFirstBy(arguments[0], arguments[1], arguments[2]); } function _removeFirst(xs, value) { return removeFirstBy(xs, value, caml_equal); } function removeFirst() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _removeFirst(data, args[0]); }; } return _removeFirst(arguments[0], arguments[1]); } function zipWithIndex(xs) { return reduceWithIndexU(xs, [], function(acc, value, index) { acc.push([ value, index ]); return acc; }); } function _all(xs, predicateFn) { return everyU(xs, predicateFn); } function all() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _all(data, args[0]); }; } return _all(arguments[0], arguments[1]); } function _any(xs, predicateFn) { return someU(xs, predicateFn); } function any() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _any(data, args[0]); }; } return _any(arguments[0], arguments[1]); } function _difference(xs, ys) { return reject(uniqBy(xs, function(element) { return element; }), function(value) { return includes(ys, value); }); } function difference() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _difference(data, args[0]); }; } return _difference(arguments[0], arguments[1]); } function _union(xs, ys) { var xs$1 = concat(xs, ys); return uniqBy(xs$1, function(element) { return element; }); } function union() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _union(data, args[0]); }; } return _union(arguments[0], arguments[1]); } function _intersection(xs, ys) { var match = xs.length > ys.length ? [ xs, ys ] : [ ys, xs ]; var ys$1 = match[1]; var xs$1 = filter(match[0], function(value) { return includes(ys$1, value); }); return uniqBy(xs$1, function(element) { return element; }); } function intersection() { if (arguments.length === 1) { const args = arguments; return function fn(data) { return _intersection(data, args[0]); }; } return _intersection(arguments[0], arguments[1]); }