Hyperlinkv0.8.0-beta.28

Sink

Sink.takeWhileconsteffect/Sink.ts:1557
<In, Out extends In>(refinement: Refinement<In, Out>): Sink<
  Array<Out>,
  In,
  In
>
<In>(predicate: Predicate<In>): Sink<Array<In>, In, In>

Collects the longest input prefix whose elements satisfy the predicate or refinement.

Details

The first failing input is consumed and excluded from the result. Any later elements from the same pulled array are returned as leftovers.

constructors
Source effect/Sink.ts:155723 lines
export const takeWhile: {
  <In, Out extends In>(refinement: Refinement<In, Out>): Sink<Array<Out>, In, In>
  <In>(predicate: Predicate<In>): Sink<Array<In>, In, In>
} = <In>(predicate: Predicate<In>): Sink<Array<In>, In, In> =>
  fromTransform((upstream) => {
    const out = Arr.empty<In>()
    return upstream.pipe(
      Effect.flatMap((arr) => {
        for (let i = 0; i < arr.length; i++) {
          if (!predicate(arr[i])) {
            const leftover: Arr.NonEmptyReadonlyArray<In> | undefined = (i + 1) < arr.length
              ? arr.slice(i + 1) as any
              : undefined
            return Cause.done([out, leftover] as const)
          }
          out.push(arr[i])
        }
        return Effect.void
      }),
      Effect.forever({ disableYield: true }),
      Pull.catchDone((end) => Effect.succeed<End<Array<In>, In>>(end ?? [out]))
    )
  })
Referenced by 1 symbols