UNPKG

@typed/fp

Version:

Data Structures and Resources for fp-ts

128 lines 2.68 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.FromIO = exports.Applicative = exports.Apply = exports.ap = exports.ChainRec = exports.chainRec = exports.Monad = exports.chain = exports.Pointed = exports.of = exports.Functor = exports.map = exports.URI = exports.fromIO = exports.pure = exports.doFx = void 0; const Chain_1 = require("fp-ts/Chain"); const Either_1 = require("fp-ts/Either"); /** * Extract the values being returned to the internal Fx * @category Combinator * @since 0.13.0 */ function doFx(generatorFn) { return { [Symbol.iterator]: generatorFn, }; } exports.doFx = doFx; /** * @category Constructor * @since 0.13.0 */ const pure = (value) => // eslint-disable-next-line require-yield doFx(function* () { return value; }); exports.pure = pure; /** * @category Constructor * @since 0.13.0 */ const fromIO = (io) => // eslint-disable-next-line require-yield doFx(function* () { return io(); }); exports.fromIO = fromIO; /** * @category URI * @since 0.13.0 */ exports.URI = '@typed/fp/Fx'; /** * @category Combinator * @since 0.13.0 */ const map = (f) => (fa) => doFx(function* () { return f(yield* fa); }); exports.map = map; /** * @category Instance * @since 0.13.0 */ exports.Functor = { URI: exports.URI, map: exports.map, }; /** * @category Constructor * @since 0.13.0 */ exports.of = exports.pure; /** * @category Instance * @since 0.13.0 */ exports.Pointed = { of: exports.of, }; /** * @category Combinator * @since 0.13.0 */ const chain = (f) => (fa) => doFx(function* () { const a = yield* fa; return yield* f(a); }); exports.chain = chain; /** * @category Instance * @since 0.13.0 */ exports.Monad = { ...exports.Pointed, ...exports.Functor, chain: exports.chain, }; /** * @category Combinator * @since 0.13.0 */ const chainRec = (f) => (value) => doFx(function* () { let either = yield* f(value); while ((0, Either_1.isLeft)(either)) { either = yield* f(either.left); } return either.right; }); exports.chainRec = chainRec; /** * @category Instance * @since 0.13.0 */ exports.ChainRec = { URI: exports.URI, chainRec: exports.chainRec, }; /** * @category Combinator * @since 0.13.0 */ exports.ap = (0, Chain_1.ap)(exports.Monad); /** * @category Instance * @since 0.13.0 */ exports.Apply = { ...exports.Functor, ap: exports.ap }; /** * @category Instance * @since 0.13.0 */ exports.Applicative = { ...exports.Pointed, ...exports.Apply }; /** * @category Instance * @since 0.13.0 */ exports.FromIO = { URI: exports.URI, fromIO: exports.fromIO }; //# sourceMappingURL=Fx.js.map