tiny-curry
A minimal utility similar to lodash.curry
. For when every byte counts!
Returns a series of functions that consume the original function's arguments one at a time until the original function's arity (or the passed arity) is met.
Install
npm install @ngard/tiny-curry
Syntax
curry(/* function [, arity] */);
Parameters
function
- A function that will be called once the parameters are gathered through currying.
arity
- The number of curry functions to create before returning the result of the passed function called with the arguments. Defaults to function.length
.
Returns
A series of functions that each take a single argument and apply those arguments to the supplied function once they have all been gathered. Each intermediate function also has a value
method that may be invoked to apply the currently gathered arguments to the function.
Examples
import { curry } from '@ngard/tiny-curry';
function add(a, b) { return a + b; }
// add.length = 2, the number of arguments it expects
const curriedAdd = curry(add);
const addTwo = curriedAdd(2);
console.log(addTwo(5)); // logs '7'
import { curry } from '@ngard/tiny-curry';
function greet(name, title = 'Your Lordship') {
return `Good day, ${name}, ${title}`;
}
// greet.length = 1, because defaulted arguments are not 'expected'
const curriedGreet = curry(greet, 2);
const greetBob = curriedGreet('Bob');
console.log(greetBob('my friend')); // logs 'Good day, Bob, my friend'
console.log(greetBob()); // logs 'Good day, Bob, Your Lordship'
import { curry } from '@ngard/tiny-curry';
function sum(...numbers) {
return numbers.reduce((total, number) => total + number);
}
// sum.length = 0, because rest arguments are not 'expected'
const curriedSum = curry(sum, Infinity);
// call `.value()` on an infinitely curried function to call the
// original function with the gathered arguments
const total = curriedSum(1)(2)(3)(4).value();
console.log(total); // logs '10'