Hyperlinkv0.8.0-beta.28

Stream

Stream.crossconsteffect/Stream.ts:3436
<AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(
  left: Stream<AL, EL, RL>
) => Stream<[AL, AR], EL | ER, RL | RR>
<AL, ER, RR, AR, EL, RL>(
  left: Stream<AL, ER, RR>,
  right: Stream<AR, EL, RL>
): Stream<[AL, AR], EL | ER, RL | RR>

Creates the cartesian product of two streams, running the right stream for each element in the left stream.

Details

See also Stream.zip for the more common point-wise variant.

Example (Computing cartesian products)

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

const program = Effect.gen(function*() {
  const left = Stream.make(1, 2)
  const right = Stream.make("a", "b")
  const values = yield* Stream.runCollect(Stream.cross(left, right))
  yield* Console.log(values)
})

Effect.runPromise(program)
// Output: [ [ 1, "a" ], [ 1, "b" ], [ 2, "a" ], [ 2, "b" ] ]
zipping
Source effect/Stream.ts:34367 lines
export const cross: {
  <AR, ER, RR>(right: Stream<AR, ER, RR>): <AL, EL, RL>(left: Stream<AL, EL, RL>) => Stream<[AL, AR], EL | ER, RL | RR>
  <AL, ER, RR, AR, EL, RL>(left: Stream<AL, ER, RR>, right: Stream<AR, EL, RL>): Stream<[AL, AR], EL | ER, RL | RR>
} = dual(2, <AL, EL, RL, AR, ER, RR>(
  left: Stream<AL, EL, RL>,
  right: Stream<AR, ER, RR>
): Stream<[AL, AR], EL | ER, RL | RR> => crossWith(left, right, (l, r) => [l, r]))