@typed/fp
Version:
Data Structures and Resources for fp-ts
50 lines • 1.41 kB
JavaScript
;
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