UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

50 lines 1.41 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.MonadRec = exports.ChainRec = exports.struct = exports.chainRec = void 0; const tslib_1 = require("tslib"); const E = (0, tslib_1.__importStar)(require("fp-ts/Either")); const function_1 = require("fp-ts/function"); const O = (0, tslib_1.__importStar)(require("fp-ts/Option")); const S = (0, tslib_1.__importStar)(require("./struct")); /** * @since 0.9.2 * @category Combinator */ const chainRec = (f) => (value) => { let option = f(value); while (O.isSome(option)) { if (E.isRight(option.value)) { return O.some(option.value.right); } option = f(option.value.left); } return option; }; exports.chainRec = chainRec; /** * @since 0.12.1 * @category Constructor */ const struct = (opts) => { const { concat } = O.getMonoid(S.getAssignSemigroup()); const entries = Object.entries(opts); return entries.reduce((acc, [k, o]) => (0, function_1.pipe)(acc, concat((0, function_1.pipe)(o, O.map((v) => S.make(k, v))))), O.none); }; exports.struct = struct; /** * @since 0.9.2 * @category Typeclass */ exports.ChainRec = { chainRec: exports.chainRec, }; /** * @since 0.9.2 * @category Typeclass */ exports.MonadRec = { ...O.Monad, ...exports.ChainRec, }; (0, tslib_1.__exportStar)(require("fp-ts/Option"), exports); //# sourceMappingURL=Option.js.map