mezzanine
Version:
Fantasy land union types with pattern matching
179 lines (59 loc) • 9.41 kB
JavaScript
;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