ramda-adjunct
Version:
Ramda Adjunct is the most popular and most comprehensive set of utilities for use with Ramda, providing a variety of useful, well tested functions with excellent documentation.
308 lines (297 loc) • 10.7 kB
JavaScript
exports.__esModule = true;
exports["default"] = void 0;
var _ramda = require("ramda");
var fl = _interopRequireWildcard(require("./mapping.js"));
var _traits = require("./traits.js");
function _getRequireWildcardCache(e) { if ("function" != typeof WeakMap) return null; var r = new WeakMap(), t = new WeakMap(); return (_getRequireWildcardCache = function _getRequireWildcardCache(e) { return e ? t : r; })(e); }
function _interopRequireWildcard(e, r) { if (!r && e && e.__esModule) return e; if (null === e || "object" != _typeof(e) && "function" != typeof e) return { "default": e }; var t = _getRequireWildcardCache(r); if (t && t.has(e)) return t.get(e); var n = { __proto__: null }, a = Object.defineProperty && Object.getOwnPropertyDescriptor; for (var u in e) if ("default" !== u && {}.hasOwnProperty.call(e, u)) { var i = a ? Object.getOwnPropertyDescriptor(e, u) : null; i && (i.get || i.set) ? Object.defineProperty(n, u, i) : n[u] = e[u]; } return n["default"] = e, t && t.set(e, n), n; }
function _typeof(o) { "@babel/helpers - typeof"; return _typeof = "function" == typeof Symbol && "symbol" == typeof Symbol.iterator ? function (o) { return typeof o; } : function (o) { return o && "function" == typeof Symbol && o.constructor === Symbol && o !== Symbol.prototype ? "symbol" : typeof o; }, _typeof(o); }
function _classCallCheck(a, n) { if (!(a instanceof n)) throw new TypeError("Cannot call a class as a function"); }
function _defineProperties(e, r) { for (var t = 0; t < r.length; t++) { var o = r[t]; o.enumerable = o.enumerable || !1, o.configurable = !0, "value" in o && (o.writable = !0), Object.defineProperty(e, _toPropertyKey(o.key), o); } }
function _createClass(e, r, t) { return r && _defineProperties(e.prototype, r), t && _defineProperties(e, t), Object.defineProperty(e, "prototype", { writable: !1 }), e; }
function _toPropertyKey(t) { var i = _toPrimitive(t, "string"); return "symbol" == _typeof(i) ? i : i + ""; }
function _toPrimitive(t, r) { if ("object" != _typeof(t) || !t) return t; var e = t[Symbol.toPrimitive]; if (void 0 !== e) { var i = e.call(t, r || "default"); if ("object" != _typeof(i)) return i; throw new TypeError("@@toPrimitive must return a primitive value."); } return ("string" === r ? String : Number)(t); }
/**
* The simplest {@link https://github.com/fantasyland/fantasy-land|fantasy-land}
* compatible monad which attaches no information to values.
*
* The Identity type is a very simple type that has no interesting side effects and
* is effectively just a container of some value. So why does it exist ?
* The Identity type is often used as the base monad of a monad
* transformer when no other behaviour is required.
*
* @memberOf RA
* @implements
* {@link https://github.com/fantasyland/fantasy-land#apply|Apply},
* {@link https://github.com/fantasyland/fantasy-land#applicative|Applicative},
* {@link https://github.com/fantasyland/fantasy-land#functor|Functor},
* {@link https://github.com/fantasyland/fantasy-land#setoid|Setoid},
* {@link https://github.com/fantasyland/fantasy-land#semigroup|Semigroup},
* {@link https://github.com/fantasyland/fantasy-land#chain|Chain},
* {@link https://github.com/fantasyland/fantasy-land#monad|Monad},
* {@link https://github.com/fantasyland/fantasy-land#ord|Ord},
* {@link https://github.com/fantasyland/fantasy-land#monoid|Monoid*},
* {@link https://github.com/fantasyland/fantasy-land#contravariant|Contravariant}
* @since {@link https://char0n.github.io/ramda-adjunct/1.8.0|v1.8.0}
*/
var Identity = /*#__PURE__*/function (_fl$of, _fl$ap, _fl$map, _fl$equals, _fl$concat, _fl$chain, _fl$lte, _fl$empty, _fl$contramap) {
/**
* Private constructor. Use {@link RA.Identity.of|Identity.of} instead.
*
* @param {*} value
* @return {RA.Identity}
*/
function Identity(value) {
_classCallCheck(this, Identity);
this.value = value;
}
/**
* Catamorphism for a value.
* @returns {*}
* @example
*
* const a = Identity.of(1);
* a.get(); //=> 1
*/
return _createClass(Identity, [{
key: "get",
value: function get() {
return this.value;
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#apply|Apply} specification.
*
* @sig ap :: Apply f => f a ~> f (a -> b) -> f b
* @param {RA.Identity} applyWithFn
* @return {RA.Identity}
* @example
*
* const a = Identity.of(1);
* const b = Identity.of(1).map(a => b => a + b);
*
* a.ap(b); //=> Identity(2)
*/
}, {
key: _fl$ap,
value: function value(applyWithFn) {
return _traits.applyTrait[fl.ap].call(this, applyWithFn);
}
}, {
key: "ap",
value: function ap(applyWithFn) {
return this[fl.ap](applyWithFn);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#functor|Functor} specification.
*
* @sig map :: Functor f => f a ~> (a -> b) -> f b
* @param {Function} fn
* @return {RA.Identity}
* @example
*
* const a = Identity.of(1);
* a.map(a => a + 1); //=> Identity(2)
*/
}, {
key: _fl$map,
value: function value(fn) {
return _traits.functorTrait[fl.map].call(this, fn);
}
}, {
key: "map",
value: function map(fn) {
return this[fl.map](fn);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#setoid|Setoid} specification.
*
* @sig equals :: Setoid a => a ~> a -> Boolean
* @param {RA.Identity} setoid
* @return {boolean}
* @example
*
* const a = Identity.of(1);
* const b = Identity.of(1);
* const c = Identity.of(2);
*
* a.equals(b); //=> true
* a.equals(c); //=> false
*/
}, {
key: _fl$equals,
value: function value(setoid) {
return _traits.setoidTrait[fl.equals].call(this, setoid);
}
}, {
key: "equals",
value: function equals(setoid) {
return this[fl.equals](setoid);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#semigroup|Semigroup} specification.
*
* @sig concat :: Semigroup a => a ~> a -> a
* @param {RA.Identity} semigroup
* @return {RA.Identity}
* @example
*
* const a = Identity.of(1);
* const b = Identity.of(1);
* a.concat(b); //=> 2
*
* const c = Identity.of('c');
* const d = Identity.of('d');
* c.concat(d); //=> 'cd'
*
* const e = Identity.of(['e']);
* const f = Identity.of(['f']);
* e.concat(f); //=> ['e', 'f']
*/
}, {
key: _fl$concat,
value: function value(semigroup) {
return _traits.semigroupTrait[fl.concat].call(this, semigroup);
}
}, {
key: "concat",
value: function concat(semigroup) {
return this[fl.concat](semigroup);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#chain|Chain} specification.
*
* @sig chain :: Chain m => m a ~> (a -> m b) -> m b
* @param {Function} fn Function returning the value of the same {@link https://github.com/fantasyland/fantasy-land#semigroup|Chain}
* @return {RA.Identity}
* @example
*
* const a = Identity.of(1);
* const fn = val => Identity.of(val + 1);
*
* a.chain(fn).chain(fn); //=> Identity(3)
*/
}, {
key: _fl$chain,
value: function value(fn) {
return _traits.chainTrait[fl.chain].call(this, fn);
}
}, {
key: "chain",
value: function chain(fn) {
return this[fl.chain](fn);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#ord|Ord} specification.
*
* @sig lte :: Ord a => a ~> a -> Boolean
* @param {RA.Identity} ord
* @return {boolean}
* @example
*
* const a = Identity.of(1);
* const b = Identity.of(1);
* const c = Identity.of(2);
*
* a.lte(b); //=> true
* a.lte(c); //=> true
* c.lte(a); //=> false
*/
}, {
key: _fl$lte,
value: function value(ord) {
return _traits.ordTrait[fl.lte].call(this, ord);
}
}, {
key: "lte",
value: function lte(ord) {
return this[fl.lte](ord);
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#monoid|Monoid*} specification.
* Partial implementation of Monoid specification. `empty` method on instance only, returning
* identity value of the wrapped type. Using `R.empty` under the hood.
*
*
* @sig empty :: Monoid m => () -> m
* @return {RA.Identity}
* @example
*
* const a = Identity.of('test');
* const i = a.empty();
*
* a.concat(i); //=> Identity('string');
* i.concat(a); //=> Identity('string');
*/
}, {
key: _fl$empty,
value: function value() {
return this.constructor.of((0, _ramda.empty)(this.value));
}
}, {
key: "empty",
value: function empty() {
return this[fl.empty]();
}
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#contravariant|Contravariant} specification.
*
* @sig contramap :: Contravariant f => f a ~> (b -> a) -> f b
* @param {Function} fn
* @return {RA.Identity}
* @example
*
* const identity = a => a;
* const add1 = a => a + 1;
* const divide2 = a => a / 2;
*
* Identity.of(divide2).contramap(add1).get()(3); //=> 2
* Identity.of(identity).contramap(divide2).contramap(add1).get()(3); //=> 2
* Identity.of(identity).contramap(a => divide2(add1(a))).get()(3); //=> 2
*/
}, {
key: _fl$contramap,
value: function value(fn) {
var _this = this;
return this.constructor.of(function (value) {
return _this.value(fn(value));
});
}
}, {
key: "contramap",
value: function contramap(fn) {
return this[fl.contramap](fn);
}
}], [{
key: _fl$of,
value:
/**
* Fantasy land {@link https://github.com/fantasyland/fantasy-land#applicative|Applicative} specification.
*
* @static
* @sig of :: Applicative f => a -> f a
* @param {*} value
* @returns {RA.Identity}
* @example
*
* const a = Identity.of(1); //=> Identity(1)
*/
function value(_value) {
return new Identity(_value);
}
}, {
key: "of",
value: function of(value) {
return new Identity(value);
}
/**
* @static
*/
}, {
key: '@@type',
get: function get() {
return 'RA/Identity';
}
}]);
}(fl.of, fl.ap, fl.map, fl.equals, fl.concat, fl.chain, fl.lte, fl.empty, fl.contramap);
var _default = exports["default"] = Identity;
;