UNPKG

mezzanine

Version:

Fantasy land union types with pattern matching

138 lines (99 loc) 2.15 kB
/** * id :: a -> a * * * @template A * @param {A} a * @returns {A} */ export function id(a) { return a; } /** * compose :: (b -> c) -> (a -> b) -> (a -> c) * * @template A * @template B * @template C * @param {function(B): C} f * @param {function(A): B} g * @returns {function(A): C} */ export function compose(f, g) { return function (x) { return f(g(x)); }; } /** * apply :: (a -> b) -> a -> b * * @template A * @template B * @param {function(A): B} f * @param {A} x * @returns {B} */ function apply(f, x) { return f(x); } /** * curry2 :: ((a, b) -> c) -> (a -> b -> c) * * @template A * @template B * @template C * @param {function(A, B): C} f * @returns {CurriedFunction2<A, B, C>} */ export function curry2(f) { function curried(a, b) { switch (arguments.length) { case 0:return curried; case 1:return b => f(a, b); default:return f(a, b);} } return curried; } /** * curry3 :: ((a, b, c) -> d) -> (a -> b -> c -> d) * * @template A * @template B * @template C * @template D * @param {function(A, B, C): D} f * @returns {CurriedFunction3<A, B, C, D>} */ export function curry3(f) { function curried(a, b, c) {// eslint-disable-line complexity switch (arguments.length) { case 0:return curried; case 1:return curry2((b, c) => f(a, b, c)); case 2:return c => f(a, b, c); default:return f(a, b, c);} } return curried; } /** * curry4 :: ((a, b, c, d) -> e) -> (a -> b -> c -> d -> e) * * @template A * @template B * @template C * @template D * @template E * @param {function(A, B, C, D): E} f * @returns {CurriedFunction4<A, B, C, D, E>} */ export function curry4(f) { function curried(a, b, c, d) { switch (arguments.length) { case 0:return curried; case 1:return curry3((b, c, d) => f(a, b, c, d)); case 2:return curry2((c, d) => f(a, b, c, d)); case 3:return d => f(a, b, c, d); default:return f(a, b, c, d);} } return curried; } //# sourceMappingURL=fp.js.map