Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with
or
.
Download ZIP
Flexible currying/partial application mixin for Underscore.js
JavaScript Shell
Branch: master

Fetching latest commit…

Cannot retrieve the latest commit at this time

Failed to load latest commit information.
test
.gitignore
LICENSE
README.md
finkel.js
package.json
run_linters.sh

README.md

Finkel

A simple, yet powerful currying mixin for Underscore or Lo-Dash. Yes, technically this is actually partial application, but currying is more fun to say, even if true currying doesn't make much sense in Javascript.

You might notice that there is no option for setting this. This is by design; that's not the responsibility of a currying or partial application function. If you do need to set this, there is a native function: fn.bind(newthis).

How to use

var _ = require('underscore');
require('finkel')(_);

var fn = function (a, b, c, d) {
    return a + b + c + d;
}

// The following all result in 'wxyz'
_.curry(fn, 'w', 'x')('y', 'z');
_.curry(fn, _, 'x')('w', 'y', 'z');
_.curry(fn, [_], 'z')('w', 'x', 'y');
_.curry(fn, [_], 'y', _)('w', 'x', 'z');
_.curry(fn, 'w', [_], 'z')('x', 'y');

Hole: _

Indicates an argument to be filled in when the curried function is called. _ should be a reference to the Underscore object.

Splat: [_]

Indicates a break in the argument list, to be filled by all arguments that have not filled holes.


_.curry(function, args...)

Returns a new function with the same body as function, but with the given arguments partially applied. Arguments supplied to the curried function will be appended to the argument list.

_.curry(function, [args | holes]...)

Returns a new function with the given arguments partially applied. Arguments supplied to the curried function will be inserted in holes, in order, and then appended to the argument list.

_.curry(function, [args | holes]..., splat, [args | holes]...)

Returns a new function with the given arguments partially applied. Arguments at the beginning of the argument list supplied to the curried function will be inserted in holes preceding the splat, and arguments at the end of the list will be inserted in holes following the splat. Any remaining arguments in the middle of the list will be filled in where the splat occurs.

Note: The arguments to curry may contain multiple splats, but only the first will be recognized. Any more splats will do nothing, not even act as a normal hole. Think of a splat as a greedy * in regex.

License

This software is released under the MIT license.

Something went wrong with that request. Please try again.