purs-pkg-deps
Version:
Query package dependencies in PureScript package-sets
55 lines (48 loc) • 1.36 kB
JavaScript
;
// jshint maxparams: 3
exports.traverseArrayImpl = (function () {
function array1(a) {
return [a];
}
function array2(a) {
return function (b) {
return [a, b];
};
}
function array3(a) {
return function (b) {
return function (c) {
return [a, b, c];
};
};
}
function concat2(xs) {
return function (ys) {
return xs.concat(ys);
};
}
return function (apply) {
return function (map) {
return function (pure) {
return function (f) {
return function (array) {
function go(bot, top) {
switch (top - bot) {
case 0: return pure([]);
case 1: return map(array1)(f(array[bot]));
case 2: return apply(map(array2)(f(array[bot])))(f(array[bot + 1]));
case 3: return apply(apply(map(array3)(f(array[bot])))(f(array[bot + 1])))(f(array[bot + 2]));
default:
// This slightly tricky pivot selection aims to produce two
// even-length partitions where possible.
var pivot = bot + Math.floor((top - bot) / 4) * 2;
return apply(map(concat2)(go(bot, pivot)))(go(pivot, top));
}
}
return go(0, array.length);
};
};
};
};
};
})();