« Back to Index
Curry implementation in Node
View original Gist on GitHub
curry.js
module.exports = curry;
function curry (f) {
var arity = f.length;
var params = [];
var end = createEnd(f, arity);
return createCurried(params, arity, end);
}
function createEnd (f, arity) {
var src = 'return f(';
for (var i = 0; i < arity; i++) {
src += (i ? ', p[' : 'p[') + i + ']';
}
src += ');';
var endCall = new Function ('f', 'p', src);
return function end (p) {
return endCall(f, p);
};
}
function createCurried (collected, arity, end) {
return function () {
var params = appendArgs(collected, arguments);
return params.length < arity
? createCurried(params, arity, end)
: end(params);
}
}
function appendArgs (arr, args) {
return arr.concat(arr.slice.call(args));
}