Hyperlinkv0.8.0-beta.28

Channel

Channel.runForEachWhileconsteffect/Channel.ts:7786
<OutElem, EX, RX>(f: (o: OutElem) => Effect.Effect<boolean, EX, RX>): <
  OutErr,
  OutDone,
  Env
>(
  self: Channel<OutElem, OutErr, OutDone, unknown, unknown, unknown, Env>
) => Effect.Effect<void, OutErr | EX, Env | RX>
<OutElem, OutErr, OutDone, Env, EX, RX>(
  self: Channel<OutElem, OutErr, OutDone, unknown, unknown, unknown, Env>,
  f: (o: OutElem) => Effect.Effect<boolean, EX, RX>
): Effect.Effect<void, OutErr | EX, Env | RX>

Runs a channel and applies an effectful predicate to each output element until the predicate returns false.

Details

Returning true continues consuming the channel. Returning false stops consumption early. The returned effect completes with void.

execution
Source effect/Channel.ts:778623 lines
export const runForEachWhile: {
  <OutElem, EX, RX>(
    f: (o: OutElem) => Effect.Effect<boolean, EX, RX>
  ): <OutErr, OutDone, Env>(
    self: Channel<OutElem, OutErr, OutDone, unknown, unknown, unknown, Env>
  ) => Effect.Effect<void, OutErr | EX, Env | RX>
  <OutElem, OutErr, OutDone, Env, EX, RX>(
    self: Channel<OutElem, OutErr, OutDone, unknown, unknown, unknown, Env>,
    f: (o: OutElem) => Effect.Effect<boolean, EX, RX>
  ): Effect.Effect<void, OutErr | EX, Env | RX>
} = dual(
  2,
  <OutElem, OutErr, OutDone, Env, EX, RX>(
    self: Channel<OutElem, OutErr, OutDone, unknown, unknown, unknown, Env>,
    f: (o: OutElem) => Effect.Effect<boolean, EX, RX>
  ): Effect.Effect<void, OutErr | EX, Env | RX> =>
    runWith(self, (pull) =>
      pull.pipe(
        Effect.flatMap(f),
        Effect.flatMap((cont) => (cont ? Effect.void : Cause.done())),
        Effect.forever({ disableYield: true })
      ))
)
Referenced by 1 symbols