purs-pkg-deps
Version:
Query package dependencies in PureScript package-sets
389 lines (342 loc) • 9.56 kB
JavaScript
;
//------------------------------------------------------------------------------
// Array creation --------------------------------------------------------------
//------------------------------------------------------------------------------
exports.range = function (start) {
return function (end) {
var step = start > end ? -1 : 1;
var result = new Array(step * (end - start) + 1);
var i = start, n = 0;
while (i !== end) {
result[n++] = i;
i += step;
}
result[n] = i;
return result;
};
};
var replicateFill = function (count) {
return function (value) {
if (count < 1) {
return [];
}
var result = new Array(count);
return result.fill(value);
};
};
var replicatePolyfill = function (count) {
return function (value) {
var result = [];
var n = 0;
for (var i = 0; i < count; i++) {
result[n++] = value;
}
return result;
};
};
// In browsers that have Array.prototype.fill we use it, as it's faster.
exports.replicate = typeof Array.prototype.fill === "function" ? replicateFill : replicatePolyfill;
exports.fromFoldableImpl = (function () {
function Cons(head, tail) {
this.head = head;
this.tail = tail;
}
var emptyList = {};
function curryCons(head) {
return function (tail) {
return new Cons(head, tail);
};
}
function listToArray(list) {
var result = [];
var count = 0;
var xs = list;
while (xs !== emptyList) {
result[count++] = xs.head;
xs = xs.tail;
}
return result;
}
return function (foldr) {
return function (xs) {
return listToArray(foldr(curryCons)(emptyList)(xs));
};
};
})();
//------------------------------------------------------------------------------
// Array size ------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.length = function (xs) {
return xs.length;
};
//------------------------------------------------------------------------------
// Non-indexed reads -----------------------------------------------------------
//------------------------------------------------------------------------------
exports.unconsImpl = function (empty) {
return function (next) {
return function (xs) {
return xs.length === 0 ? empty({}) : next(xs[0])(xs.slice(1));
};
};
};
//------------------------------------------------------------------------------
// Indexed operations ----------------------------------------------------------
//------------------------------------------------------------------------------
exports.indexImpl = function (just) {
return function (nothing) {
return function (xs) {
return function (i) {
return i < 0 || i >= xs.length ? nothing : just(xs[i]);
};
};
};
};
exports.findMapImpl = function (nothing) {
return function (isJust) {
return function (f) {
return function (xs) {
for (var i = 0; i < xs.length; i++) {
var result = f(xs[i]);
if (isJust(result)) return result;
}
return nothing;
};
};
};
};
exports.findIndexImpl = function (just) {
return function (nothing) {
return function (f) {
return function (xs) {
for (var i = 0, l = xs.length; i < l; i++) {
if (f(xs[i])) return just(i);
}
return nothing;
};
};
};
};
exports.findLastIndexImpl = function (just) {
return function (nothing) {
return function (f) {
return function (xs) {
for (var i = xs.length - 1; i >= 0; i--) {
if (f(xs[i])) return just(i);
}
return nothing;
};
};
};
};
exports._insertAt = function (just) {
return function (nothing) {
return function (i) {
return function (a) {
return function (l) {
if (i < 0 || i > l.length) return nothing;
var l1 = l.slice();
l1.splice(i, 0, a);
return just(l1);
};
};
};
};
};
exports._deleteAt = function (just) {
return function (nothing) {
return function (i) {
return function (l) {
if (i < 0 || i >= l.length) return nothing;
var l1 = l.slice();
l1.splice(i, 1);
return just(l1);
};
};
};
};
exports._updateAt = function (just) {
return function (nothing) {
return function (i) {
return function (a) {
return function (l) {
if (i < 0 || i >= l.length) return nothing;
var l1 = l.slice();
l1[i] = a;
return just(l1);
};
};
};
};
};
//------------------------------------------------------------------------------
// Transformations -------------------------------------------------------------
//------------------------------------------------------------------------------
exports.reverse = function (l) {
return l.slice().reverse();
};
exports.concat = function (xss) {
if (xss.length <= 10000) {
// This method is faster, but it crashes on big arrays.
// So we use it when can and fallback to simple variant otherwise.
return Array.prototype.concat.apply([], xss);
}
var result = [];
for (var i = 0, l = xss.length; i < l; i++) {
var xs = xss[i];
for (var j = 0, m = xs.length; j < m; j++) {
result.push(xs[j]);
}
}
return result;
};
exports.filter = function (f) {
return function (xs) {
return xs.filter(f);
};
};
exports.partition = function (f) {
return function (xs) {
var yes = [];
var no = [];
for (var i = 0; i < xs.length; i++) {
var x = xs[i];
if (f(x))
yes.push(x);
else
no.push(x);
}
return { yes: yes, no: no };
};
};
exports.scanl = function (f) {
return function (b) {
return function (xs) {
var len = xs.length;
var acc = b;
var out = new Array(len);
for (var i = 0; i < len; i++) {
acc = f(acc)(xs[i]);
out[i] = acc;
}
return out;
};
};
};
exports.scanr = function (f) {
return function (b) {
return function (xs) {
var len = xs.length;
var acc = b;
var out = new Array(len);
for (var i = len - 1; i >= 0; i--) {
acc = f(xs[i])(acc);
out[i] = acc;
}
return out;
};
};
};
//------------------------------------------------------------------------------
// Sorting ---------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.sortByImpl = (function () {
function mergeFromTo(compare, fromOrdering, xs1, xs2, from, to) {
var mid;
var i;
var j;
var k;
var x;
var y;
var c;
mid = from + ((to - from) >> 1);
if (mid - from > 1) mergeFromTo(compare, fromOrdering, xs2, xs1, from, mid);
if (to - mid > 1) mergeFromTo(compare, fromOrdering, xs2, xs1, mid, to);
i = from;
j = mid;
k = from;
while (i < mid && j < to) {
x = xs2[i];
y = xs2[j];
c = fromOrdering(compare(x)(y));
if (c > 0) {
xs1[k++] = y;
++j;
}
else {
xs1[k++] = x;
++i;
}
}
while (i < mid) {
xs1[k++] = xs2[i++];
}
while (j < to) {
xs1[k++] = xs2[j++];
}
}
return function (compare) {
return function (fromOrdering) {
return function (xs) {
var out;
if (xs.length < 2) return xs;
out = xs.slice(0);
mergeFromTo(compare, fromOrdering, out, xs.slice(0), 0, xs.length);
return out;
};
};
};
})();
//------------------------------------------------------------------------------
// Subarrays -------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.slice = function (s) {
return function (e) {
return function (l) {
return l.slice(s, e);
};
};
};
//------------------------------------------------------------------------------
// Zipping ---------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.zipWith = function (f) {
return function (xs) {
return function (ys) {
var l = xs.length < ys.length ? xs.length : ys.length;
var result = new Array(l);
for (var i = 0; i < l; i++) {
result[i] = f(xs[i])(ys[i]);
}
return result;
};
};
};
//------------------------------------------------------------------------------
// Folding ---------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.any = function (p) {
return function (xs) {
var len = xs.length;
for (var i = 0; i < len; i++) {
if (p(xs[i])) return true;
}
return false;
};
};
exports.all = function (p) {
return function (xs) {
var len = xs.length;
for (var i = 0; i < len; i++) {
if (!p(xs[i])) return false;
}
return true;
};
};
//------------------------------------------------------------------------------
// Partial ---------------------------------------------------------------------
//------------------------------------------------------------------------------
exports.unsafeIndexImpl = function (xs) {
return function (n) {
return xs[n];
};
};