Effect.gen(function*() {
const delayNumber = (stream: Stream.Stream<number>) =>
Stream.zipWithPrevious(stream).pipe(
Stream.map(([prev, _]) =>
Option.match(prev, {
onNone: () => 0,
onSome: (prev) => prev
})
)
)
const queue = yield* Queue.bounded<number>(2)
queue.offer(0)
const sA = Stream.fromIterable([1, 2, 3])
const sC = delayNumber(Stream.fromQueue(queue))
const result = Stream.zipWith(sA, sC, (a, b) => a + b)
yield* Stream.runForEach(result, (elem) => queue.offer(elem))
return result
})
Effect.gen(function*() {
const delayNumber = (stream: Stream.Stream<number>) =>
Stream.zipWithPrevious(stream).pipe(
Stream.map(([prev, _]) =>
Option.match(prev, {
onNone: () => 0,
onSome: (prev) => prev
})
)
)
const queue = yield* Queue.bounded<number>(2)
queue.offer(0)
const sA = Stream.fromIterable([1, 2, 3])
const sC = delayNumber(Stream.fromQueue(queue))
const result = Stream.zipWith(sA, sC, (a, b) => a + b)
yield* Stream.runForEach(result, (elem) => queue.offer(elem))
return result
})