Skip to content

A minimal-weight currying utility similar to lodash.curry

License

Notifications You must be signed in to change notification settings

NickGard/tiny-curry

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

4 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

tiny-curry

source bundle size build status license

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.


lodash.curry: bundle size
tiny-curry: bundle size


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'

About

A minimal-weight currying utility similar to lodash.curry

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published