Hyperlinkv0.8.0-beta.28

Stream

Stream.mergeRightconsteffect/Stream.ts:3337
<AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(
  left: Stream<AL, EL, RL>
) => Stream<AR, ER | EL, RR | RL>
<AL, EL, RL, AR, ER, RR>(
  left: Stream<AL, EL, RL>,
  right: Stream<AR, ER, RR>
): Stream<AR, EL | ER, RL | RR>

Merges this stream and the specified stream together, emitting only the values from the right stream while the left stream runs for its effects.

When to use

Use when the left stream is needed for its effects or failures, but downstream consumers should only receive values from the right stream.

Details

The merged stream ends when the right stream completes, interrupting the left stream. Failures from the left stream still fail the merged stream.

Example (Merging streams while keeping right values)

import { Console, Effect, Stream } from "effect"

const left = Stream.make("left-1", "left-2").pipe(
  Stream.tap(() => Effect.sync(() => undefined))
)
const right = Stream.make(1, 2)

const merged = Stream.mergeRight(left, right)

const program = Effect.gen(function*() {
  const result = yield* Stream.runCollect(merged)
  yield* Console.log(result)
})

Effect.runPromise(program)
// Output: [ 1, 2 ]
merging
Source effect/Stream.ts:33378 lines
export const mergeRight: {
  <AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(left: Stream<AL, EL, RL>) => Stream<AR, ER | EL, RR | RL>
  <AL, EL, RL, AR, ER, RR>(left: Stream<AL, EL, RL>, right: Stream<AR, ER, RR>): Stream<AR, EL | ER, RL | RR>
} = dual(
  2,
  <AL, EL, RL, AR, ER, RR>(left: Stream<AL, EL, RL>, right: Stream<AR, ER, RR>): Stream<AR, EL | ER, RL | RR> =>
    mergeEffect(right, runDrain(left))
)