"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); function nullOrUndef(t) { return t === null || t === undefined; } var Maybe = (function () { function Maybe(t) { this.t = t; } Maybe.lift = function (t) { if (nullOrUndef(t)) { return Maybe.nothing; } return new Maybe(t); }; Maybe.all = function (t0, t1) { return t0.bind(function (_t0) { return t1.fmap(function (_t1) { return [_t0, _t1]; }); }); }; Maybe.prototype.bind = function (fn) { if (!nullOrUndef(this.t)) { return fn(this.t); } return Maybe.nothing; }; Maybe.prototype.fmap = function (fn) { return this.bind(function (t) { return Maybe.lift(fn(t)); }); }; Object.defineProperty(Maybe.prototype, "isNothing", { get: function () { return nullOrUndef(this.t); }, enumerable: true, configurable: true }); Object.defineProperty(Maybe.prototype, "isSomething", { get: function () { return !nullOrUndef(this.t); }, enumerable: true, configurable: true }); Maybe.prototype.catch = function (def) { if (this.isNothing) { return def(); } return this; }; Maybe.prototype.unwrap = function () { return this.t; }; Maybe.nothing = new Maybe(undefined); return Maybe; }()); exports.Maybe = Maybe; function unwrapFirst(ts) { var f = ts.find(function (t) { return t.isSomething; }); if (!!f) { return f.unwrap(); } return undefined; } exports.unwrapFirst = unwrapFirst; function all() { var preds = []; for (var _i = 0; _i < arguments.length; _i++) { preds[_i] = arguments[_i]; } return function (t) { return !preds.find(function (p) { return !p(t); }); }; } exports.all = all; function any() { var preds = []; for (var _i = 0; _i < arguments.length; _i++) { preds[_i] = arguments[_i]; } return function (t) { return !!preds.find(function (p) { return p(t); }); }; } exports.any = any; function ifTrue(pred) { return function (t) { return (pred(t)) ? Maybe.lift(t) : Maybe.nothing; }; } exports.ifTrue = ifTrue; function listToMaybe(ms) { var unWrapped = ms.filter(function (m) { return m.isSomething; }).map(function (m) { return m.unwrap(); }); return unWrapped.length !== 0 ? Maybe.lift(unWrapped) : Maybe.nothing; } exports.listToMaybe = listToMaybe;