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