Hyperlinkv0.8.0-beta.28

Channel

Channel.filterMapEffectconsteffect/Channel.ts:3316
<OutElem, B, X, EX, RX>(
  filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
): <OutErr, OutDone, InElem, InErr, InDone, Env>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>
) => Channel<B, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>
<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
): Channel<B, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>

Filters and maps output elements using an effectful Filter.

When to use

Use to apply effectful logic that can discard channel output elements and emit transformed values for the elements that pass.

Details

Successful filter results are emitted as mapped values. Failed filter results are discarded. Failures from the effectful filter fail the returned channel.

Source effect/Channel.ts:331629 lines
export const filterMapEffect: {
  <OutElem, B, X, EX, RX>(
    filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
  ): <OutErr, OutDone, InElem, InErr, InDone, Env>(
    self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>
  ) => Channel<B, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>
  <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
    self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
    filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
  ): Channel<B, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>
} = dual(2, <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
): Channel<B, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX> =>
  fromTransform((upstream, scope) =>
    Effect.map(
      toTransform(self)(upstream, scope),
      (pull) =>
        Effect.flatMap(pull, function loop(elem): Pull.Pull<B, OutErr | EX, OutDone, RX> {
          return Effect.flatMap(
            filter(elem),
            (result) =>
              Result.isFailure(result)
                ? Effect.flatMap(pull, loop)
                : Effect.succeed(result.success)
          )
        })
    )
  ))