UNPKG

@effect-ts/system

Version:

Effect-TS is a zero dependency set of libraries to write highly productive, purely functional TypeScript at scale.

37 lines (34 loc) 1.65 kB
import * as CK from "../../../../Collections/Immutable/Chunk/index.mjs"; import * as T from "../../../../Effect/index.mjs"; import * as SC from "../../../../Schedule/index.mjs"; import * as CH from "../../Channel/index.mjs"; import * as C from "../core.mjs"; /** * Schedules the output of the stream using the provided `schedule` and emits its output at * the end (if `schedule` is finite). * Uses the provided function to align the stream and schedule outputs on the same type. */ export function scheduleWith_(self, schedule, f, g) { const loop = (driver, chunk, index) => { if (index < CK.size(chunk)) { return CH.unwrap(T.suspend(() => { const a = CK.unsafeGet_(chunk, index); return T.foldM_(driver.next(a), () => T.zipLeft_(T.map_(T.orDie(driver.last), b => CH.zipRight_(CH.write(CK.make(f(a), g(b))), loop(driver, chunk, index + 1))), driver.reset), () => T.succeed(CH.zipRight_(CH.write(CK.single(f(a))), loop(driver, chunk, index + 1)))); })); } else { return CH.readWithCause(chunk => loop(driver, chunk, 0), _ => CH.failCause(_), _ => CH.end(_)); } }; return new C.Stream(CH.chain_(CH.fromEffect(SC.driver(schedule)), _ => self.channel[">>>"](loop(_, CK.empty(), 0)))); } /** * Schedules the output of the stream using the provided `schedule` and emits its output at * the end (if `schedule` is finite). * Uses the provided function to align the stream and schedule outputs on the same type. * * @ets_data_first scheduleWith_ */ export function scheduleWith(schedule, f, g) { return self => scheduleWith_(self, schedule, f, g); } //# sourceMappingURL=scheduleWith.mjs.map