@typed/fp
Version:
Data Structures and Resources for fp-ts
949 lines • 25.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.fromReaderK = exports.chainReaderK = exports.chainFirstReaderK = exports.asks = exports.ask = exports.FromReader = exports.MonadRec = exports.ChainRec = exports.Monad = exports.bindEnvW = exports.bindEnv = exports.bindW = exports.bind = exports.chainFirstW = exports.chainFirst = exports.Chain = exports.getApplicativeMonoid = exports.Applicative = exports.apTEnv = exports.apTEnvW = exports.apSEnvW = exports.apSEnv = exports.getApplySemigroup = exports.apTW = exports.apT = exports.apSecondW = exports.apSecond = exports.apSW = exports.apS = exports.apFirstW = exports.apFirst = exports.Apply = exports.tupled = exports.flap = exports.bindTo = exports.Functor = exports.Pointed = exports.URI = exports.chainRec = exports.of = exports.constant = exports.map = exports.fromReader = exports.switchFirst = exports.switchMapW = exports.switchMap = exports.chainW = exports.chain = exports.apW = exports.ap = void 0;
exports.provideAllWith = exports.askAndUse = exports.askAndProvide = exports.Provide = exports.UseAll = exports.ProvideAll = exports.UseSome = exports.ProvideSome = exports.useAll = exports.provideAll = exports.useSome = exports.provideSome = exports.periodic = exports.never = exports.empty = exports.recoverWith = exports.concatMap = exports.mergeArray = exports.mergeFirst = exports.merge = exports.filter = exports.asksTask = exports.asksIO = exports.asksEnv = exports.fromStreamK = exports.chainStreamK = exports.chainFirstStreamK = exports.fromStream = exports.FromStream = exports.fromTaskK = exports.chainTaskK = exports.chainFirstTaskK = exports.fromTask = exports.FromTask = exports.Do = exports.fromIOK = exports.chainIOK = exports.chainFirstIOK = exports.fromIO = exports.FromIO = exports.fromEnvK = exports.chainFirstEnvK = exports.chainEnvK = exports.fromEnv = exports.FromEnv = exports.fromResumeK = exports.chainResumeK = exports.chainFirstResumeK = exports.fromResume = exports.FromResume = void 0;
exports.zero = exports.until = exports.throwError = exports.throttle = exports.takeWhile = exports.switchLatest = exports.slice = exports.skipWhile = exports.skipAfter = exports.since = exports.separate = exports.race = exports.partitionMap = exports.partition = exports.multicast = exports.mergeConcurrently = exports.loop = exports.filterMap = exports.during = exports.join = exports.delay = exports.debounce = exports.continueWith = exports.compact = exports.skipRepeats = exports.skipRepeatsWith = exports.scan = exports.at = exports.now = exports.collectEvents = exports.onDispose = exports.exhaustMapLatestEnv = exports.exhaustLatestEnv = exports.exhaustMapLatest = exports.exhaustLatest = exports.startWith = exports.skip = exports.take = exports.tap = exports.withStream = exports.struct = exports.combineAll = exports.combine = exports.useAllWithEnv = exports.useSomeWithEnv = exports.provideAllWithEnv = exports.provideSomeWithEnv = exports.useSomeWith = exports.useAllWith = exports.provideSomeWith = void 0;
exports.hold = exports.toEnv = exports.mergeMapWhen = exports.keyed = exports.Compactable = exports.Filterable = void 0;
const tslib_1 = require("tslib");
const H = (0, tslib_1.__importStar)(require("@most/hold"));
const App = (0, tslib_1.__importStar)(require("fp-ts/Applicative"));
const Ap = (0, tslib_1.__importStar)(require("fp-ts/Apply"));
const Ch = (0, tslib_1.__importStar)(require("fp-ts/Chain"));
const Either_1 = require("fp-ts/Either");
const FIO = (0, tslib_1.__importStar)(require("fp-ts/FromIO"));
const FR = (0, tslib_1.__importStar)(require("fp-ts/FromReader"));
const FT = (0, tslib_1.__importStar)(require("fp-ts/FromTask"));
const function_1 = require("fp-ts/function");
const F = (0, tslib_1.__importStar)(require("fp-ts/Functor"));
const Predicate_1 = require("fp-ts/Predicate");
const RT = (0, tslib_1.__importStar)(require("fp-ts/ReaderT"));
const RA = (0, tslib_1.__importStar)(require("fp-ts/ReadonlyArray"));
const Disposable_1 = require("./Disposable");
const Eq_1 = require("./Eq");
const FE = (0, tslib_1.__importStar)(require("./FromEnv"));
const FRe = (0, tslib_1.__importStar)(require("./FromResume"));
const FS = (0, tslib_1.__importStar)(require("./FromStream"));
const FN = (0, tslib_1.__importStar)(require("./function"));
const P = (0, tslib_1.__importStar)(require("./Provide"));
const Resume_1 = require("./Resume");
const S = (0, tslib_1.__importStar)(require("./Stream"));
const St = (0, tslib_1.__importStar)(require("./struct"));
/**
* @since 0.9.2
* @category Combinator
*/
exports.ap = RT.ap(S.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
exports.apW = exports.ap;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chain = RT.chain(S.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainW = exports.chain;
/**
* @since 0.9.2
* @category Combinator
*/
exports.switchMap = RT.chain({
map: S.map,
chain: (f) => FN.flow(S.map(f), S.switchLatest),
});
/**
* @since 0.9.2
* @category Combinator
*/
exports.switchMapW = exports.switchMap;
/**
* @since 0.9.2
* @category Combinator
*/
const switchFirst = (second) => (first) => (r) => (0, function_1.pipe)(first, (0, exports.withStream)(S.switchFirst(second(r))))(r);
exports.switchFirst = switchFirst;
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromReader = RT.fromReader(S.Pointed);
/**
* @since 0.9.2
* @category Combinator
*/
exports.map = RT.map(S.Functor);
/**
* @since 0.9.2
* @category Combinator
*/
const constant = (b) => (0, exports.map)(() => b);
exports.constant = constant;
/**
* @since 0.9.2
* @category Constructor
*/
exports.of = RT.of(S.Pointed);
/**
* @since 0.9.2
* @category Combinator
*/
function chainRec(f) {
return (value) => (env) => S.chainRec((a) => f(a)(env))(value);
}
exports.chainRec = chainRec;
/**
* @since 0.9.2
* @category URI
*/
exports.URI = '@typed/fp/ReaderStream';
/**
* @since 0.9.2
* @category Instance
*/
exports.Pointed = {
of: exports.of,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Functor = {
map: exports.map,
};
/**
* @since 0.9.2
* @category Combinator
*/
exports.bindTo = F.bindTo(exports.Functor);
/**
* @since 0.9.2
* @category Combinator
*/
exports.flap = F.flap(exports.Functor);
/**
* @since 0.9.2
* @category Combinator
*/
exports.tupled = F.tupled(exports.Functor);
/**
* @since 0.9.2
* @category Instance
*/
exports.Apply = {
...exports.Functor,
ap: exports.ap,
};
/**
* @since 0.9.2
* @category Combinator
*/
exports.apFirst = Ap.apFirst(exports.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
exports.apFirstW = exports.apFirst;
/**
* @since 0.9.2
* @category Combinator
*/
exports.apS = Ap.apS(exports.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
exports.apSW = exports.apS;
/**
* @since 0.9.2
* @category Combinator
*/
exports.apSecond = Ap.apSecond(exports.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
exports.apSecondW = exports.apSecond;
/**
* @since 0.9.2
* @category Combinator
*/
exports.apT = Ap.apT(exports.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
exports.apTW = exports.apT;
/**
* @since 0.9.2
* @category Typeclass Constructor
*/
exports.getApplySemigroup = Ap.getApplySemigroup(exports.Apply);
/**
* @since 0.9.2
* @category Combinator
*/
const apSEnv = (name, fb) => (0, exports.apS)(name, FN.pipe(fb, exports.fromEnv));
exports.apSEnv = apSEnv;
/**
* @since 0.9.2
* @category Combinator
*/
exports.apSEnvW = exports.apSEnv;
/**
* @since 0.9.2
* @category Combinator
*/
const apTEnvW = (fb) => FN.pipe(fb, exports.fromEnv, exports.apTW);
exports.apTEnvW = apTEnvW;
/**
* @since 0.9.2
* @category Combinator
*/
exports.apTEnv = exports.apTEnvW;
/**
* @since 0.9.2
* @category Instance
*/
exports.Applicative = {
...exports.Apply,
...exports.Pointed,
};
/**
* @since 0.9.2
* @category Typeclass Constructor
*/
exports.getApplicativeMonoid = App.getApplicativeMonoid(exports.Applicative);
/**
* @since 0.9.2
* @category Instance
*/
exports.Chain = {
...exports.Functor,
chain: exports.chain,
};
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirst = Ch.chainFirst(exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstW = exports.chainFirst;
/**
* @since 0.9.2
* @category Combinator
*/
exports.bind = Ch.bind(exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.bindW = exports.bind;
/**
* @since 0.9.2
* @category Combinator
*/
const bindEnv = (name, f) => (0, exports.bind)(name, FN.flow(f, exports.fromEnv));
exports.bindEnv = bindEnv;
/**
* @since 0.9.2
* @category Combinator
*/
const bindEnvW = (name, f) => (0, exports.bindW)(name, FN.flow(f, exports.fromEnv));
exports.bindEnvW = bindEnvW;
/**
* @since 0.9.2
* @category Instance
*/
exports.Monad = {
...exports.Chain,
...exports.Pointed,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.ChainRec = {
chainRec,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.MonadRec = {
...exports.Monad,
chainRec,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.FromReader = {
fromReader: exports.fromReader,
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.ask = FR.ask(exports.FromReader);
/**
* @since 0.9.2
* @category Constructor
*/
exports.asks = FR.asks(exports.FromReader);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstReaderK = FR.chainFirstReaderK(exports.FromReader, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainReaderK = FR.chainReaderK(exports.FromReader, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromReaderK = FR.fromReaderK(exports.FromReader);
/**
* @since 0.9.2
* @category Instance
*/
exports.FromResume = {
fromResume: (r) => () => S.fromResume(r),
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromResume = exports.FromResume.fromResume;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstResumeK = FRe.chainFirstResumeK(exports.FromResume, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainResumeK = FRe.chainResumeK(exports.FromResume, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromResumeK = FRe.fromResumeK(exports.FromResume);
/**
* @since 0.9.2
* @category Instance
*/
exports.FromEnv = {
fromEnv: (env) => FN.flow(env, S.fromResume),
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromEnv = exports.FromEnv.fromEnv;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainEnvK = FE.chainEnvK(exports.FromEnv, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstEnvK = FE.chainFirstEnvK(exports.FromEnv, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromEnvK = FE.fromEnvK(exports.FromEnv);
/**
* @since 0.9.2
* @category Instance
*/
exports.FromIO = {
fromIO: (io) => () => S.fromIO(io),
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromIO = exports.FromIO.fromIO;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstIOK = FIO.chainFirstIOK(exports.FromIO, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainIOK = FIO.chainIOK(exports.FromIO, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromIOK = FIO.fromIOK(exports.FromIO);
/**
* @since 0.9.2
* @category Constructor
*/
exports.Do = (0, exports.fromIO)(() => Object.create(null));
/**
* @since 0.9.2
* @category Instance
*/
exports.FromTask = {
...exports.FromIO,
fromTask: (task) => () => S.fromTask(task),
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromTask = exports.FromTask.fromTask;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstTaskK = FT.chainFirstTaskK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainTaskK = FT.chainTaskK(exports.FromTask, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromTaskK = FT.fromTaskK(exports.FromTask);
/**
* @since 0.9.2
* @category Instance
*/
exports.FromStream = {
fromStream: FN.constant,
};
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromStream = exports.FromStream.fromStream;
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainFirstStreamK = FS.chainFirstStreamK(exports.FromStream, exports.Chain);
/**
* @since 0.9.2
* @category Combinator
*/
exports.chainStreamK = FS.chainStreamK(exports.FromStream, exports.Chain);
/**
* @since 0.9.2
* @category Constructor
*/
exports.fromStreamK = FS.fromStreamK(exports.FromStream);
/**
* @since 0.9.2
* @category Constructor
*/
const asksEnv = (f) => (r) => FN.pipe(r, f(r), S.fromResume);
exports.asksEnv = asksEnv;
/**
* @since 0.9.2
* @category Constructor
*/
const asksIO = (f) => (r) => FN.pipe(r, f, S.fromIO);
exports.asksIO = asksIO;
/**
* @since 0.9.2
* @category Constructor
*/
const asksTask = (f) => (r) => FN.pipe(r, f, S.fromTask);
exports.asksTask = asksTask;
function filter(predicate) {
return (rs) => (r) => FN.pipe(r, rs, S.filter(predicate));
}
exports.filter = filter;
/**
* @since 0.9.2
* @category Combinator
*/
function merge(a) {
return (b) => (r) => FN.pipe(a(r), S.merge(b(r)));
}
exports.merge = merge;
/**
* @since 0.9.2
* @category Combinator
*/
function mergeFirst(a) {
return (b) => (r) => FN.pipe(r, b, S.mergeFirst(a(r)));
}
exports.mergeFirst = mergeFirst;
/**
* @since 0.9.2
* @category Combinator
*/
function mergeArray(streams) {
return (r) => S.mergeArray(streams.map((rs) => rs(r)));
}
exports.mergeArray = mergeArray;
/**
* @since 0.9.2
* @category Combinator
*/
function concatMap(f) {
return (rs) => (r) => FN.pipe(r, rs, S.concatMap((a) => FN.pipe(r, f(a))));
}
exports.concatMap = concatMap;
/**
* @since 0.9.2
* @category Combinator
*/
const recoverWith = (f) => (rs) => (r) => FN.pipe(r, rs, S.recoverWith((e) => FN.pipe(r, f(e))));
exports.recoverWith = recoverWith;
/**
* @since 0.9.2
* @category Constructor
*/
exports.empty = (0, exports.fromStreamK)(S.empty);
/**
* @since 0.9.2
* @category Constructor
*/
exports.never = (0, exports.fromStreamK)(S.never);
/**
* @since 0.9.2
* @category Constructor
*/
exports.periodic = (0, exports.fromStreamK)(S.periodic);
/**
* @since 0.9.2
* @category Combinator
*/
const provideSome = (provided) => (rs) => (e2) => rs({ ...provided, ...e2 });
exports.provideSome = provideSome;
/**
* @since 0.9.2
* @category Combinator
*/
const useSome = (provided) => (rs) => (e2) => rs({ ...e2, ...provided });
exports.useSome = useSome;
/**
* @since 0.9.2
* @category Combinator
*/
const provideAll = (provided) => (rs) => (e2) => rs({ ...provided, ...e2 });
exports.provideAll = provideAll;
/**
* @since 0.9.2
* @category Combinator
*/
const useAll = (provided) => (rs) => () => rs(provided);
exports.useAll = useAll;
/**
* @since 0.9.2
* @category Instance
*/
exports.ProvideSome = {
provideSome: exports.provideSome,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.UseSome = {
useSome: exports.useSome,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.ProvideAll = {
provideAll: exports.provideAll,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.UseAll = {
useAll: exports.useAll,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Provide = {
provideAll: exports.provideAll,
provideSome: exports.provideSome,
useAll: exports.useAll,
useSome: exports.useSome,
};
/**
* @since 0.9.2
* @category Combinator
*/
exports.askAndProvide = P.askAndProvide({ ...exports.ProvideAll, ...exports.Chain, ...exports.FromReader });
/**
* @since 0.9.2
* @category Combinator
*/
exports.askAndUse = P.askAndUse({ ...exports.UseAll, ...exports.Chain, ...exports.FromReader });
/**
* @since 0.9.2
* @category Combinator
*/
exports.provideAllWith = P.provideAllWith({ ...exports.ProvideAll, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.provideSomeWith = P.provideSomeWith({ ...exports.ProvideSome, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.useAllWith = P.useAllWith({ ...exports.UseAll, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.useSomeWith = P.useSomeWith({ ...exports.UseSome, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.provideSomeWithEnv = FE.provideSomeWithEnv({ ...exports.FromEnv, ...exports.ProvideSome, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.provideAllWithEnv = FE.provideAllWithEnv({ ...exports.FromEnv, ...exports.ProvideAll, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.useSomeWithEnv = FE.useSomeWithEnv({ ...exports.FromEnv, ...exports.UseSome, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
exports.useAllWithEnv = FE.useAllWithEnv({ ...exports.FromEnv, ...exports.UseAll, ...exports.Chain });
/**
* @since 0.9.2
* @category Combinator
*/
const combine = (f) => (rsa) => (rsb) => (e) => S.combine(f, rsa(e), rsb(e));
exports.combine = combine;
/**
* @since 0.9.2
* @category Combinator
*/
const combineAll = (...rss) => (e) => S.combineAll(...rss.map((rs) => rs(e)));
exports.combineAll = combineAll;
/**
* @since 0.13.2
* @category Combinator
*/
const struct = (props) => (0, function_1.pipe)((0, exports.combineAll)(...(0, function_1.pipe)(Object.entries(props), RA.map(([k, stream]) => (0, function_1.pipe)(stream, (0, exports.map)((v) => St.make(k, v)))))), (0, exports.map)((o) => Object.assign({}, ...o)));
exports.struct = struct;
/**
* @since 0.9.2
* @category Combinator
*/
const withStream = (f) => (rs) => (e) => FN.pipe(e, rs, f);
exports.withStream = withStream;
/**
* @since 0.9.2
* @category Combinator
*/
const tap = (f) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.tap(f)));
exports.tap = tap;
/**
* @since 0.9.2
* @category Combinator
*/
exports.take = FN.flow(S.take, exports.withStream);
/**
* @since 0.9.2
* @category Combinator
*/
exports.skip = FN.flow(S.skip, exports.withStream);
/**
* @since 0.9.2
* @category Combinator
*/
const startWith = (value) => (stream) => (0, exports.withStream)(S.startWith(value))(stream);
exports.startWith = startWith;
/**
* @since 0.9.2
* @category Combinator
*/
const exhaustLatest = (rs) => (e) => S.exhaustMapLatest((rs) => rs(e))(rs(e));
exports.exhaustLatest = exhaustLatest;
/**
* @since 0.9.2
* @category Combinator
*/
const exhaustMapLatest = (f) => (rs) => (e) => S.exhaustMapLatest((a) => f(a)(e))(rs(e));
exports.exhaustMapLatest = exhaustMapLatest;
/**
* @since 0.9.2
* @category Combinator
*/
const exhaustLatestEnv = (env) => (rs) => (0, exports.exhaustMapLatest)(() => (0, exports.fromEnv)(env))(rs);
exports.exhaustLatestEnv = exhaustLatestEnv;
/**
* @since 0.9.2
* @category Combinator
*/
const exhaustMapLatestEnv = (f) => (rs) => (0, exports.exhaustMapLatest)((a) => (0, exports.fromEnv)(f(a)))(rs);
exports.exhaustMapLatestEnv = exhaustMapLatestEnv;
/**
* @since 0.9.2
* @category Combinator
*/
const onDispose = (disposable) => (0, exports.withStream)(S.onDispose(disposable));
exports.onDispose = onDispose;
/**
* @since 0.9.2
* @category Combinator
*/
const collectEvents = (scheduler) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.collectEvents(scheduler)));
exports.collectEvents = collectEvents;
/**
* @since 0.9.2
* @category Constructor
*/
exports.now = FN.flow(S.now, exports.fromStream);
/**
* @since 0.9.2
* @category Constructor
*/
exports.at = FN.flow(S.at, exports.fromStream);
/**
* @since 0.9.2
* @category Combinator
*/
const scan = (f, seed) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.scan(f, seed)));
exports.scan = scan;
/**
* @since 0.9.2
* @category Combinator
*/
const skipRepeatsWith = (Eq) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.skipRepeatsWith((a, b) => Eq.equals(a)(b))));
exports.skipRepeatsWith = skipRepeatsWith;
/**
* @since 0.9.2
* @category Combinator
*/
exports.skipRepeats = (0, exports.skipRepeatsWith)(Eq_1.deepEqualsEq);
/**
* @since 0.9.2
* @category Combinator
*/
exports.compact = (0, exports.withStream)(S.compact);
/**
* @since 0.9.2
* @category Combinator
*/
const continueWith = (f) => (rs) => (e) => FN.pipe(e, rs, S.continueWith(() => f()(e)));
exports.continueWith = continueWith;
/**
* @since 0.9.2
* @category Combinator
*/
const debounce = (delay) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.debounce(delay)));
exports.debounce = debounce;
/**
* @since 0.9.2
* @category Combinator
*/
const delay = (delay) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.delay(delay)));
exports.delay = delay;
/**
* @since 0.9.2
* @category Combinator
*/
const join = (rs) => (e) => FN.pipe(e, rs, S.chain((f) => f(e)));
exports.join = join;
/**
* @since 0.9.2
* @category Combinator
*/
const during = (timeWindow) => (values) => (e) => FN.pipe(e, values, S.during((0, exports.join)(timeWindow)(e)));
exports.during = during;
/**
* @since 0.9.2
* @category Combinator
*/
const filterMap = (f) => (fa) => FN.pipe(fa, (0, exports.withStream)(S.filterMap(f)));
exports.filterMap = filterMap;
/**
* @since 0.9.2
* @category Combinator
*/
const loop = (f, seed) => (fa) => (e) => FN.pipe(e, fa, S.loop(f, seed));
exports.loop = loop;
/**
* @since 0.9.2
* @category Combinator
*/
const mergeConcurrently = (concurrency) => (rs) => (e) => FN.pipe(e, rs, S.mergeMapConcurrently((rs) => rs(e), concurrency));
exports.mergeConcurrently = mergeConcurrently;
/**
* @since 0.9.2
* @category Combinator
*/
const multicast = (rs) => FN.pipe(rs, (0, exports.withStream)(S.multicast));
exports.multicast = multicast;
/**
* @since 0.9.2
* @category Combinator
*/
const partition = (predicate) => (fa) => ({
left: FN.pipe(fa, filter((0, Predicate_1.not)(predicate))),
right: FN.pipe(fa, filter(predicate)),
});
exports.partition = partition;
/**
* @since 0.9.2
* @category Combinator
*/
const partitionMap = (f) => (fa) => ({
left: FN.pipe(fa, (0, exports.map)(f), filter(Either_1.isLeft), (0, exports.map)((x) => x.left)),
right: FN.pipe(fa, (0, exports.map)(f), filter(Either_1.isRight), (0, exports.map)((x) => x.right)),
});
exports.partitionMap = partitionMap;
/**
* @since 0.9.2
* @category Combinator
*/
const race = (second) => (first) => (e) => FN.pipe(e, first, S.race(() => second(e)));
exports.race = race;
/**
* @since 0.9.2
* @category Combinator
*/
const separate = (rs) => FN.pipe(rs, (0, exports.partitionMap)((e) => e));
exports.separate = separate;
/**
* @since 0.9.2
* @category Combinator
*/
const since = (timeWindow) => (values) => (e) => FN.pipe(e, values, S.since(timeWindow(e)));
exports.since = since;
/**
* @since 0.9.2
* @category Combinator
*/
const skipAfter = (p) => (s) => FN.pipe(s, (0, exports.withStream)(S.skipAfter(p)));
exports.skipAfter = skipAfter;
/**
* @since 0.9.2
* @category Combinator
*/
const skipWhile = (p) => (s) => FN.pipe(s, (0, exports.withStream)(S.skipWhile(p)));
exports.skipWhile = skipWhile;
/**
* @since 0.9.2
* @category Combinator
*/
const slice = (skip, take) => (rs) => FN.pipe(rs, (0, exports.withStream)(S.slice(skip, take)));
exports.slice = slice;
/**
* @since 0.9.2
* @category Combinator
*/
const switchLatest = (rs) => (e) => FN.pipe(e, rs, S.map((f) => f(e)), S.switchLatest);
exports.switchLatest = switchLatest;
/**
* @since 0.9.2
* @category Combinator
*/
const takeWhile = (p) => (s) => FN.pipe(s, (0, exports.withStream)(S.takeWhile(p)));
exports.takeWhile = takeWhile;
/**
* @since 0.9.2
* @category Combinator
*/
const throttle = (period) => (s) => FN.pipe(s, (0, exports.withStream)(S.throttle(period)));
exports.throttle = throttle;
/**
* @since 0.9.2
* @category Combinator
*/
exports.throwError = (0, exports.fromStreamK)(S.throwError);
/**
* @since 0.9.2
* @category Combinator
*/
const until = (timeWindow) => (values) => (e) => FN.pipe(e, values, S.until(timeWindow(e)));
exports.until = until;
/**
* @since 0.9.2
* @category Combinator
*/
exports.zero = FN.flow(S.zero, exports.fromStream);
/**
* @since 0.9.2
* @category Instance
*/
exports.Filterable = {
partitionMap: exports.partitionMap,
partition: exports.partition,
filterMap: exports.filterMap,
filter,
};
/**
* @since 0.9.2
* @category Instance
*/
exports.Compactable = {
compact: exports.compact,
separate: exports.separate,
};
/**
* @since 0.9.2
* @category Combinator
*/
const keyed = (Eq) => (rs) => (0, function_1.pipe)(rs, (0, exports.withStream)(S.keyed(Eq)));
exports.keyed = keyed;
/**
* @since 0.9.2
* @category Combinator
*/
const mergeMapWhen = (Eq = Eq_1.deepEqualsEq) => (f) => (values) => (e) => (0, function_1.pipe)(values, (0, exports.withStream)(S.mergeMapWhen(Eq)((v) => f(v)(e))))(e);
exports.mergeMapWhen = mergeMapWhen;
/**
* Listens to the next value of a stream.
*/
/**
* @since 0.9.2
* @category Natural Transformation
*/
const toEnv = (rs) => (e) => (0, Resume_1.async)((resume) => {
const disposable = (0, Disposable_1.settable)();
disposable.addDisposable((0, function_1.pipe)(e, rs, S.take(1)).run(S.createSink({ event: (_, x) => disposable.addDisposable(resume(x)) }), e.scheduler));
return disposable;
});
exports.toEnv = toEnv;
/**
* @since 0.9.2
* @category Combinator
*/
const hold = (rs) => (0, function_1.pipe)(rs, (0, exports.withStream)(H.hold));
exports.hold = hold;
//# sourceMappingURL=ReaderStream.js.map