Depois de ler uma implementação interessante [mas bastante complexa, IMHO] da função currying em javascript, decidi criar a minha própria. Tentei mantê-lo o mais simples possível. Espero que gostem.
var curry = function(f) {
var curry_ = function(f, tl, accin) {
return function() {
var l = arguments.length,
accout = accin.concat([].splice.call(arguments, 0));
if (l + accin.length >= tl) {
return f.apply(this, accout);
}
return curry_(f, tl, accout);
};
};
return curry_(f, f.length, []);
}
Exemplo ao vivo em:
http://embed.plnkr.co/jdRaYCDRp7kdHzVUNk93/preview