Читая статью о реализации обобщенного карри в Javascript, я наткнулся на этот кусок кода.
function curry(fn) {
return (...xs) => {
if (xs.length === 0) {
throw Error('EMPTY INVOCATION');
}
if (xs.length >= fn.length) {
return fn(...xs);
}
return curry(fn.bind(null, ...xs));
};
}
Я не могу ухватиться за ту часть объяснения, которая гласит:
Мы создаем копию fn, у которой первые k аргументов связаны (частично применены), и передаем еев качестве следующего fn с уменьшенной арностью N - k.
Как арность fn
уменьшается до Nk в последующих вызовах?Связанная функция с k аргументами должна иметь арность k, верно?