UNPKG

mezzanine

Version:

Fantasy land union types with pattern matching

179 lines (59 loc) 9.41 kB
"use strict";Object.defineProperty(exports, "__esModule", { value: true });exports. id = id;exports. compose = compose;exports. curry2 = curry2;exports. curry3 = curry3;exports. curry4 = curry4; /** * id :: a -> a * * * @template A * @param {A} a * @returns {A} */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} */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>} */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>} */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>} */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