Hyperlinkv0.8.0-beta.28

Channel

Channel.haltWhenconsteffect/Channel.ts:6902
<OutDone2, OutErr2, Env2>(
  effect: Effect.Effect<OutDone2, OutErr2, Env2>
): <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>
) => Channel<
  OutElem,
  OutErr | OutErr2,
  OutDone | OutDone2,
  InElem,
  InErr,
  InDone,
  Env2 | Env
>
<
  OutElem,
  OutErr,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env,
  OutDone2,
  OutErr2,
  Env2
>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  effect: Effect.Effect<OutDone2, OutErr2, Env2>
): Channel<
  OutElem,
  OutErr | OutErr2,
  OutDone | OutDone2,
  InElem,
  InErr,
  InDone,
  Env2 | Env
>

Stops a channel when the specified effect completes or fails.

Details

If the effect completes before the channel is done, its success value becomes the returned channel's done value. If the effect fails, the returned channel fails with that error. If the channel completes first, the channel's done value is preserved.

interruption
Source effect/Channel.ts:690228 lines
export const haltWhen: {
  <OutDone2, OutErr2, Env2>(
    effect: Effect.Effect<OutDone2, OutErr2, Env2>
  ): <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>(
    self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>
  ) => Channel<OutElem, OutErr | OutErr2, OutDone | OutDone2, InElem, InErr, InDone, Env2 | Env>
  <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, OutDone2, OutErr2, Env2>(
    self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
    effect: Effect.Effect<OutDone2, OutErr2, Env2>
  ): Channel<OutElem, OutErr | OutErr2, OutDone | OutDone2, InElem, InErr, InDone, Env2 | Env>
} = dual(2, <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, OutDone2, OutErr2, Env2>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  effect: Effect.Effect<OutDone2, OutErr2, Env2>
): Channel<OutElem, OutErr | OutErr2, OutDone | OutDone2, InElem, InErr, InDone, Env2 | Env> =>
  fromTransformBracket(Effect.fnUntraced(function*(upstream, scope, forkedScope) {
    const pull = yield* toTransform(self)(upstream, scope)
    let haltCause: Cause.Cause<OutErr2 | Cause.Done<OutDone2>> | undefined = undefined
    yield* effect.pipe(
      Effect.catchCause((cause) => {
        haltCause = cause
        return Effect.void
      }),
      Effect.forkIn(forkedScope)
    )
    return Effect.suspend((): Pull.Pull<OutElem, OutErr | OutErr2, OutDone | OutDone2> =>
      haltCause ? Effect.failCause(haltCause) : pull
    )
  })))
Referenced by 1 symbols