@typed/fp
Version:
Data Structures and Resources for fp-ts
104 lines • 2.72 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.wrap = exports.Profunctor = exports.Functor = exports.URI = exports.promap = exports.local = exports.map = exports.listenToEvents = exports.getEvents = exports.getSendEvent = exports.sendEvent = void 0;
const tslib_1 = require("tslib");
/**
* RefAdapter is an abstraction over [Ref](./Ref.ts.md) and [Adapter](./Adapter.ts.md)
* @since 0.11.0
*/
const function_1 = require("fp-ts/function");
const Tuple2_1 = require("fp-ts/Tuple2");
const A = (0, tslib_1.__importStar)(require("./Adapter"));
const E = (0, tslib_1.__importStar)(require("./Env"));
const function_2 = require("./function");
const RS = (0, tslib_1.__importStar)(require("./ReaderStream"));
const Ref = (0, tslib_1.__importStar)(require("./Ref"));
/**
* @since 0.12.0
* @category Combinator
*/
function sendEvent(event) {
return (ra) => (0, function_2.pipe)(ra.get, E.chainIOK(([send]) => () => send(event)));
}
exports.sendEvent = sendEvent;
/**
* @since 0.11.0
* @category Combinator
*/
function getSendEvent(ra) {
return (0, function_2.pipe)(ra.get, E.map(Tuple2_1.fst));
}
exports.getSendEvent = getSendEvent;
/**
* @since 0.11.0
* @category Combinator
*/
function getEvents(ra) {
return (0, function_2.pipe)(ra.get, E.map(Tuple2_1.snd), RS.fromEnv, RS.chainStreamK(function_1.identity));
}
exports.getEvents = getEvents;
/**
* @since 0.12.0
* @category Combinator
*/
function listenToEvents(f) {
return (ra) => (0, function_2.pipe)(ra, getEvents, RS.chainEnvK(f));
}
exports.listenToEvents = listenToEvents;
/**
* @since 0.11.0
* @category Combinator
*/
function map(f) {
return (ra) => (0, function_2.pipe)(ra, Ref.map(A.map(f)));
}
exports.map = map;
/**
* @since 0.11.0
* @category Combinator
*/
function local(f) {
return (ra) => (0, function_2.pipe)(ra, Ref.map(A.local(f)));
}
exports.local = local;
/**
* @since 0.11.0
* @category Combinator
*/
const promap = (f, g) => (adapter) => (0, function_2.pipe)(adapter, local(f), map(g));
exports.promap = promap;
/**
* @since 0.11.0
* @category URI
*/
exports.URI = '@typed/fp/RefAdapter';
/**
* @since 0.11.0
* @category Instance
*/
exports.Functor = {
map,
};
/**
* @since 0.11.0
* @category Instance
*/
exports.Profunctor = {
map,
promap: exports.promap,
};
/**
* @since 0.13.5
* @category Instance
*/
function wrap(ra) {
return {
...ra,
sendEvent: (event) => (0, function_2.pipe)(ra, sendEvent(event)),
getSendEvent: getSendEvent(ra),
events: getEvents(ra),
listenToEvents: (f) => (0, function_2.pipe)(ra, listenToEvents(f)),
};
}
exports.wrap = wrap;
//# sourceMappingURL=RefAdapter.js.map