functional-abstraction/functools

View on GitHub
src/curry.js

Summary

Maintainability
A
3 hrs
Test Coverage
import bind from './bind.js';

export default function curry(callable, arity) {
    return function () {
        const args = Array.prototype.slice.call(arguments, 0);

        const fn = bind(callable, this, args);

        const i = arity - args.length;

        if (i <= 0) {
            return fn();
        }

        return curry(fn, i);
    };
}