chickencurry

🍛 Currying made simple.

Showing:

Popularity

Downloads/wk

1.5K

GitHub Stars

84

Maintenance

Last Commit

6yrs ago

Contributors

6

Package

Dependencies

0

License

MIT

Type Definitions

Tree-Shakeable

No?

Categories

Readme

curry

Build Status Coverage Status npm version Dependency Status API-style

Currying made simple.

– and we really mean simple:

import {curry, _} from '@thisables/curry';


// 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 @thisables/curry

Usage

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); //» 3

Placeholders

A placeholder _ is a special value, which you import from 'curry-this'. 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 without the experimental syntax

const add = (a, b) => a + b;
const curriedAdd = curry.call(add);

curriedAdd(1)(2); //» 3

Or with placeholders

const foo = (...values) => values;

const curriedFoo = curry.call(foo, _, _, _);

curriedFoo(1)(2)(3); //» [1, 2, 3]

API

fn::curry(...args)

Parameters

fnthe function to curry
argscurried 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

stoeffeltomekwi
stoeffeltomekwi

License

MIT © Christoph Hermann

Rate & Review

Great Documentation0
Easy to Use0
Performant0
Highly Customizable0
Bleeding Edge0
Responsive Maintainers0
Poor Documentation0
Hard to Use0
Slow0
Buggy0
Abandoned0
Unwelcoming Community0
100
No reviews found
Be the first to rate

Alternatives

No alternatives found

Tutorials

No tutorials found
Add a tutorial