Curry a function
Collect arguments across calls until the function has as many as it declares.
function curry(fn, ...args) { return fn.length <= args.length ? fn(...args) : (...more) => curry(fn, ...args, ...more); }
Usage
const sum = (a, b, c) => a + b + c;
curry(sum)(1)(2)(3); // → 6
curry(sum, 1)(2, 3); // → 6
curry(sum, 1, 2, 3); // → 6
Know the limits
- The arity comes from fn.length, which stops at the first default or rest parameter: (a, b = 1) => … has length 1.
- The original used curry.bind(null, …); the closure is equivalent.
The function above is the code the usage lines run. It does not validate its arguments; add checks where it receives untrusted input.
Source & maintenance
Based on Curry a function from the original 1loc collection by Nguyen Huu Phuoc. Copyright (c) 2020 phuoc-ng. MIT licensed.
Closure instead of bind; arity limits documented. Documented as a reference with executed usage lines. Original MDX retained as inert source evidence.
Maintained by Oveyon. Source commit: 14b481cf60df. Read the license.
Keep exploring
- Logical xor operator — True when exactly one of two values is truthy.
- Identity function — Return the argument unchanged.
- Box handler — Chain transformations on a value, then unwrap the result.