curry-this v3.1.0
Currying made simple.
– and we really mean simple:
import {curry, _} from 'curry-this';
// Got a simple function?
const plus = (
(a, b, c) => a + b + c
)::curry();
plus(1, 2, 3); //» 6
plus(1)(2, 3); //» 6
plus(1, 2)(3); //» 6
plus(1)(2)(3); //» 6
// Got a monster function?
const {open} = require('fs');
const newScript = open::curry(_, 'w', 0755, _);
newScript('do-wonders.sh', (error, file) => {
// The `file` is ready.
});Installation
npm install curry-thisUsage
Basic usage
The function curry is invoked using the function bind syntax and returns a curried function.
const add = (a, b) => a + b;
const curriedAdd = add::curry();
curriedAdd(1)(2); //» 3Placeholders
A placeholder _ is a Symbol Symbol('CURRY-THIS-PLACEHOLDER').
Placeholders are replaced from left to right, the next call after a placeholder is passed replaces the previous placeholders one by one.
const foo = (a, b, c, d) => [a, b, c, d];
const curriedFoo = foo::curry(_, _, _, 4);
curriedFoo(1)(2)(3); //» [1, 2, 3, 4]If you pass a placeholder to curry the length of the function is ignored instead the initial call of curry defines the length of the curried function.
const foo = (...values) => values;
const curriedFoo = foo::curry(_, _, _);
curriedFoo(1)(2)(3); //» [1, 2, 3]Arity
The curried function has a fixed arity. Additional arguments aren't passed.
const foo = (...values) => values;
const curriedFoo = foo::curry(_, _, _);
curriedFoo(1)(2)(3, 5, 6, 7); //» [1, 2, 3]Not experimental usage
You can still use curry-this without the experimental syntax
const add = (a, b) => a + b;
const curriedAdd = curry.call(add);
curriedAdd(1)(2); //» 3Or with placeholders
const foo = (...values) => values;
const curriedFoo = curry.call(foo, _, _, _);
curriedFoo(1)(2)(3); //» [1, 2, 3]API
fn::curry(...args)
Parameters
| fn | the function to curry |
|---|---|
| args | curried arguments or placeholders |
Returns
A curried function.
:: huh?
If you’re wondering what the :: thing means, you’d better read this excellent overview by @jussi-kalliokoski or have a look at the function bind syntax proposal.
Maintainers
| stoeffel | tomekwi |