@tempest/core
Version:
The core of the Tempest Stream Library
64 lines • 1.52 kB
JavaScript
/**
* Takes a function with 1 argument and returns a curried version of it
*
* @export
* @template A
* @template B
* @param {(a: A) => B} f
* @returns {OneMore<A, B>}
*/
export function curry1(f) {
function curried(a) {
switch (arguments.length) {
case 0: return curried;
case 1: return f(a);
default: return curried;
}
}
return curried;
}
/**
* Takes a function with 2 arguments and returns a curried version of it
*
* @export
* @template A
* @template B
* @template C
* @param {(a: A, b: B) => C} f
* @returns {TwoMore<A, B, C>}
*/
export function curry2(f) {
function curried(a, b) {
switch (arguments.length) {
case 0: return curried;
case 1: return curry1((b) => f(a, b));
case 2: return f(a, b);
default: return curried;
}
}
return curried;
}
/**
* Takes a function with 3 arguments and returns a curried version
*
* @export
* @template A
* @template B
* @template C
* @template D
* @param {(a: A, b: B, c: C) => D} f
* @returns {ThreeMore<A, B, C, D>}
*/
export function curry3(f) {
function curried(a, b, c) {
switch (arguments.length) {
case 0: return curried;
case 1: return curry2((b, c) => f(a, b, c));
case 2: return curry1((c) => f(a, b, c));
case 3: return f(a, b, c);
default: return curried;
}
}
return curried;
}
//# sourceMappingURL=curry.js.map