Hyperlinkv0.8.0-beta.28

Channel

Channel.filterMapArrayEffectconsteffect/Channel.ts:3524
<OutElem, B, X, EX, RX>(
  filter: Filter.FilterEffect<Types.NoInfer<OutElem>, B, X, EX, RX>
): <OutErr, OutDone, InElem, InErr, InDone, Env>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >
) => Channel<
  Arr.NonEmptyReadonlyArray<B>,
  OutErr | EX,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env | RX
>
<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >,
  filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
): Channel<
  Arr.NonEmptyReadonlyArray<B>,
  OutErr | EX,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env | RX
>

Filters and maps each element inside emitted non-empty arrays using an effectful Filter.

When to use

Use when array-valued channel outputs need an effectful filter-map that can fail and can discard arrays that become empty.

Details

Successful filter results are kept as mapped values. Failed filter results are removed from the array. Arrays that become empty are discarded. Failures from the effectful filter fail the returned channel.

filtering
Source effect/Channel.ts:352427 lines
export const filterMapArrayEffect: {
  <OutElem, B, X, EX, RX>(
    filter: Filter.FilterEffect<Types.NoInfer<OutElem>, B, X, EX, RX>
  ): <OutErr, OutDone, InElem, InErr, InDone, Env>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>
  ) => Channel<Arr.NonEmptyReadonlyArray<B>, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>
  <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
    filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
  ): Channel<Arr.NonEmptyReadonlyArray<B>, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX>
} = dual(2, <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X, EX, RX>(
  self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
  filter: Filter.FilterEffect<OutElem, B, X, EX, RX>
): Channel<Arr.NonEmptyReadonlyArray<B>, OutErr | EX, OutDone, InElem, InErr, InDone, Env | RX> =>
  transformPull(self, (pull) =>
    Effect.succeed(Effect.flatMap(
      pull,
      function loop(arr): Pull.Pull<Arr.NonEmptyReadonlyArray<B>, OutErr | EX, OutDone, RX> {
        return Effect.flatMap(
          Effect.filterMapEffect(arr, filter as any),
          (passes) =>
            Arr.isReadonlyArrayNonEmpty(passes)
              ? Effect.succeed(passes as Arr.NonEmptyReadonlyArray<B>)
              : Effect.flatMap(pull, loop)
        )
      }
    ))))
Referenced by 1 symbols