Skip to content

Instantly share code, notes, and snippets.

@danprince
Created May 23, 2016 18:41
Show Gist options
  • Save danprince/a400d644d707f9279dcc88bc3aeee2cc to your computer and use it in GitHub Desktop.
Save danprince/a400d644d707f9279dcc88bc3aeee2cc to your computer and use it in GitHub Desktop.
Recursive Currying Into Unary Functions
function curry(func) {
const arity = func.length;
function recurry(args=[]) {
if(args.length == arity) {
return func(...args);
} else {
return arg => recurry([...args, arg]);
}
}
return recurry();
}
const add = (a, b) => a + b;
const curriedAdd = curry(add);
curriedAdd(3)(5) // -> 8
curriedAdd(3, 3)(5) // -> 8 (extra args are ignored)
const add3 = curriedAdd(3) // -> [Function]
add3(5) // -> 8
add3(5, 6) // - 8 (extra args are ignored)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment