Uncurry function

JavaScript, Function · Oct 22, 2020

Uncurries a function up to depth n.

  • Return a variadic function.
  • Use Array.prototype.reduce() on the provided arguments to call each subsequent curry level of the function.
  • If the length of the provided arguments is less than n throw an error.
  • Otherwise, call fn with the proper amount of arguments, using Array.prototype.slice().
  • Omit the second argument, n, to uncurry up to depth 1.
const uncurry = (fn, n = 1) => (...args) => {
  const next = acc => args => args.reduce((x, y) => x(y), acc);
  if (n > args.length) throw new RangeError('Arguments too few!');
  return next(fn)(args.slice(0, n));

const add = x => y => z => x + y + z;
const uncurriedAdd = uncurry(add, 3);
uncurriedAdd(1, 2, 3); // 6

More like this

  • Are JavaScript closures inherently evil?

    Closures are used frequently, yet often misunderstood. Understanding them in depth is crucial to be able to write clean, maintainable code.

    JavaScript, Function · May 18, 2022

  • Where and how can I use memoization in JavaScript?

    Learn different ways to memoize function calls in JavaScript as well as when to use memoization to get the best performance results.

    JavaScript, Function · Nov 7, 2021

  • Boolean traps and how to avoid them

    Boolean traps can cause readability and maintainability issues in your code. Learn what they are, how to spot and fix them in this article.

    JavaScript, Function · Jul 11, 2021