finkel
v0.1.3
Published
Flexible currying mixin for Underscore or Lo-Dash
Downloads
12
Readme
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.
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.