He tenido muchos problemas para entender cómo funciona realmente esta función de curry y qué está haciendo exactamente.
Function.prototype.curry = function() { var fn = this, args = Array.prototype.slice.call(arguments); return function() { return fn.apply(this, args.concat( Array.prototype.slice.call(arguments))); }; };porque solo estoy familiarizado con este tipo de función de curry:
function curry(f) { return function(a) { return function(b) { return f(a, b); }; }