Hyperlinkv0.8.0-beta.28

Channel

Channel.filterMapconsteffect/Channel.ts:3220
<OutElem, B, X>(filter: Filter.Filter<OutElem, B, X>): <
  OutErr,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env
>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>
) => Channel<B, OutErr, OutDone, InElem, InErr, InDone, Env>
<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X>(
  self: Channel<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env>,
  filter: Filter.Filter<OutElem, B, X>
): Channel<B, OutErr, OutDone, InElem, InErr, InDone, Env>

Filters and maps output elements using a Filter.

When to use

Use to keep only channel output elements accepted by a Filter and emit each filter success value.

Details

Successful filter results are emitted as mapped values. Failed filter results are discarded. The source channel's errors and done value are preserved.

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