Home Reference Source Test Repository

lib/curry.js

'use strict';

Object.defineProperty(exports, "__esModule", {
  value: true
});
exports.curry = curry;

var _curryN = require('./curryN');

/**
 * Returns a curried variant of the provided function.
 *
 * @since v0.1.0
 * @param {Function} fn - The function to be curried
 * @return {Function} The curried function
 * @example
 *   const greeter = (greeting, name) => `${greeting} ${name}`
 *   const curriedGreeter = curry(greeter)
 *   const helloGreeting = curriedGreeter('Hello')
 *   helloGreeting('Buzz') // => 'Hello Buzz'
 *
 *   const add = (a, b) => a + b
 *   const curriedAdd = curry(add)
 *   const addThree = curriedAdd(3)
 *   addThree(50) // => 53
 */
function curry(fn) {
  return (0, _curryN.curryN)(fn.length)(fn);
}