Hyperlinkv0.8.0-beta.28

Stream

Stream.intersperseconsteffect/Stream.ts:9486
<A2>(element: A2): <A, E, R>(
  self: Stream<A, E, R>
) => Stream<A2 | A, E, R>
<A, E, R, A2>(self: Stream<A, E, R>, element: A2): Stream<A | A2, E, R>

Inserts the provided element between emitted elements.

Example (Interspersing stream elements)

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

const program = Effect.gen(function*() {
  const stream = Stream.make(1, 2, 3, 4).pipe(Stream.intersperse(0))
  const result = yield* Stream.runCollect(stream)
  yield* Console.log(result)
})

Effect.runPromise(program)
// [1, 0, 2, 0, 3, 0, 4]
sequencing
Source effect/Stream.ts:948616 lines
export const intersperse: {
  <A2>(element: A2): <A, E, R>(self: Stream<A, E, R>) => Stream<A2 | A, E, R>
  <A, E, R, A2>(self: Stream<A, E, R>, element: A2): Stream<A | A2, E, R>
} = dual(2, <A, E, R, A2>(self: Stream<A, E, R>, element: A2): Stream<A | A2, E, R> =>
  mapArray(self, (arr, i) => {
    const out: Arr.NonEmptyArray<A | A2> = i === 0 ? [] as any : [element]
    const lastIndex = arr.length - 1
    for (let j = 0; j < arr.length; j++) {
      if (j === lastIndex) {
        out.push(arr[j])
      } else {
        out.push(arr[j], element)
      }
    }
    return out
  }))
Referenced by 1 symbols