source: node_modules/ramda-adjunct/lib/cata.js

main
Last change on this file was d24f17c, checked in by Aleksandar Panovski <apano77@…>, 15 months ago

Initial commit

  • Property mode set to 100644
File size: 3.6 KB
RevLine 
[d24f17c]1"use strict";
2
3exports.__esModule = true;
4exports["default"] = void 0;
5var _ramda = require("ramda");
6var _isFunction = _interopRequireDefault(require("./isFunction"));
7function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { "default": obj }; }
8/**
9 * The catamorphism is a way of folding a type into a value.
10 *
11 * **Either**
12 *
13 * If the either is right then the right function will be executed with
14 * the `right` value and the value of the function returned. Otherwise the left function
15 * will be called with the `left` value.
16 *
17 * **Maybe**
18 *
19 * If the maybe is Some than the right function will be executed with the `some` value and the value of the function
20 * returned. Otherwise the left function with be called without an argument.
21 *
22 * **Result**
23 *
24 * If the result is Ok than the right function will be executed with the `Ok` value and the value of the function
25 * returned. Otherwise the left function will be called with the `Error` value.
26 *
27 * **Validation**
28 *
29 * If the validation is Success than the right function will be executed with the `Success` value and the value of the function
30 * returned. Otherwise the left function will be called with the `Failure` value.
31 *
32 * Supported monadic libraries: {@link https://monet.github.io/monet.js/|monet.js}, {@link https://folktale.origamitower.com/|folktale}, {@link https://github.com/ramda/ramda-fantasy|ramda-fantasy}
33 *
34 * @func cata
35 * @memberOf RA
36 * @since {@link https://char0n.github.io/ramda-adjunct/1.4.0|v1.4.0}
37 * @category Function
38 * @sig (a -> b) -> (a -> c) -> Cata a -> b | c
39 * @param {Function} leftFn The left function that consumes the left value
40 * @param {Function} rightFn The right function that consumes the right value
41 * @param {Cata} catamorphicObj Either, Maybe or any other type with catamorphic capabilities (`cata` or `either` method)
42 * @return {*}
43 * @see {@link https://monet.github.io/monet.js/#cata|cata explained}
44 * @example
45 *
46 * // Either
47 * const eitherR = Either.Right(1);
48 * const eitherL = Either.Left(2);
49 *
50 * RA.cata(identity, identity, eitherR); //=> 1
51 * RA.cata(identity, identity, eitherL); //=> 2
52 *
53 * // Maybe
54 * const maybeSome = Maybe.Some(1);
55 * const maybeNothing = Maybe.Nothing();
56 *
57 * RA.cata(identity, identity, maybeSome); //=> 1
58 * RA.cata(identity, identity, maybeNothing); //=> undefined
59 */
60var catamorphism = (0, _ramda.curry)(function (leftFn, rightFn, catamorphicObj) {
61 // folktale support
62 if ((0, _isFunction["default"])(catamorphicObj.matchWith)) {
63 return catamorphicObj.matchWith({
64 // Result type
65 Ok: function Ok(_ref) {
66 var value = _ref.value;
67 return rightFn(value);
68 },
69 Error: function Error(_ref2) {
70 var value = _ref2.value;
71 return leftFn(value);
72 },
73 // Maybe type
74 Just: function Just(_ref3) {
75 var value = _ref3.value;
76 return rightFn(value);
77 },
78 Nothing: function Nothing() {
79 return leftFn(undefined);
80 },
81 // Validation type
82 Success: function Success(_ref4) {
83 var value = _ref4.value;
84 return rightFn(value);
85 },
86 Failure: function Failure(_ref5) {
87 var value = _ref5.value;
88 return leftFn(value);
89 }
90 });
91 }
92 if ((0, _isFunction["default"])(catamorphicObj.cata)) {
93 return catamorphicObj.cata(leftFn, rightFn);
94 }
95 if ((0, _isFunction["default"])(catamorphicObj.getOrElse)) {
96 var elseValue = "RA.cata".concat(Math.random());
97 var value = catamorphicObj.getOrElse(elseValue);
98 return value === elseValue ? leftFn() : rightFn(value);
99 }
100 return catamorphicObj.either(leftFn, rightFn);
101});
102var _default = catamorphism;
103exports["default"] = _default;
Note: See TracBrowser for help on using the repository browser.