UNPKG

@functional-lib/irrigation

Version:

irrigation fp

172 lines (144 loc) 4.54 kB
"use strict"; var _daggy = require("daggy"); var _fantasyLand = require("fantasy-land"); function _toConsumableArray(arr) { return _arrayWithoutHoles(arr) || _iterableToArray(arr) || _nonIterableSpread(); } function _nonIterableSpread() { throw new TypeError("Invalid attempt to spread non-iterable instance"); } function _iterableToArray(iter) { if (Symbol.iterator in Object(iter) || Object.prototype.toString.call(iter) === "[object Arguments]") return Array.from(iter); } function _arrayWithoutHoles(arr) { if (Array.isArray(arr)) { for (var i = 0, arr2 = new Array(arr.length); i < arr.length; i++) { arr2[i] = arr[i]; } return arr2; } } var Irrigation = (0, _daggy.taggedSum)('Irrigation', { Cons: ['head', 'tail'], Nil: [] }); Irrigation.from = function (xs) { return xs.reduceRight(function (acc, x) { return Irrigation.Cons(x, acc); }, Irrigation.Nil); }; Irrigation[_fantasyLand.empty] = Irrigation.empty = function () { return Irrigation.from([]); }; Irrigation.prototype[_fantasyLand.lte] = Irrigation.prototype.lte = function (that) { return +new Date(this.head.date) < +new Date(that.date); }; Irrigation.prototype.eq = function (that) { return +new Date(this.head.date) === +new Date(that.date); }; Irrigation.prototype[_fantasyLand.concat] = Irrigation.prototype.concat = function (that) { var _this = this; return this.cata({ Cons: function Cons(head, tail) { return tail.is && that.head ? Irrigation.Cons(head, Irrigation.Cons(that.head, that.tail)) : Irrigation.Cons(head, !that.is ? tail.concat(that) : tail); }, Nil: function Nil() { return _this; } }); }; Irrigation.prototype[_fantasyLand.equals] = Irrigation.prototype.equals = function (that) { return this.cata({ Cons: function Cons(head, tail) { return that.cata({ Cons: function Cons(head_, tail_) { return +new Date(head.date) === +new Date(head_.date) ? tail.equals(tail_) : +new Date(head.date) === +new Date(head_.date); }, Nil: function Nil() { return false; } }); }, Nil: function Nil() { return true; } }); }; Irrigation.prototype.swap = function () { var _this2 = this; return this.cata({ Cons: function Cons(head, tail) { var _tail$cata = tail.cata({ Cons: function Cons(head_, tail_) { return { head_: head_, tail_: tail_ }; }, Nil: function Nil() { return _this2; } }), head_ = _tail$cata.head_, tail_ = _tail$cata.tail_; if (!tail.is && tail.lte(head)) { tail = tail_; return Irrigation.Cons(Object.assign({}, head_), Irrigation.Cons(Object.assign({}, head), tail).swap()); } return Irrigation.Cons(Object.assign({}, head), tail.swap()); }, Nil: function Nil() { return _this2; } }); }; Irrigation.prototype.sort = function () { var sortedIrrigation; var cons = this; Irrigation.prototype.sorting = function (_cons) { var _this3 = this; return this.cata({ Cons: function Cons(head, tail) { sortedIrrigation = cons = cons.swap(); tail.sorting(cons); return sortedIrrigation; }, Nil: function Nil() { return _this3; } }); }; return this.sorting(this); }; Irrigation.prototype[_fantasyLand.map] = Irrigation.prototype.map = function (f) { var _this4 = this; return this.cata({ Cons: function Cons(head, tail) { return Irrigation.Cons(f(Object.assign({}, head)), tail.map(f)); }, Nil: function Nil() { return _this4; } }); }; Irrigation.prototype[_fantasyLand.filter] = Irrigation.prototype.filter = function (f) { return this.cata({ Cons: function Cons(head, tail) { return !f(head) ? tail.filter(f) : Irrigation.Cons(head, tail.filter(f)); }, Nil: function Nil() { return Irrigation.Nil; } }); }; Irrigation.prototype.contains = function (f) { return this.cata({ Cons: function Cons(head, tail) { if (f(head)) return true; Irrigation.Cons(head, tail.contains(f)); return false; }, Nil: function Nil() { return []; } }); }; Irrigation.prototype.toArray = function () { return this.cata({ Cons: function Cons(x, acc) { return [x].concat(_toConsumableArray(acc.toArray())); }, Nil: function Nil() { return []; } }); }; module.exports = Irrigation; //# sourceMappingURL=Irrigation.js.map