Hyperlinkv0.8.0-beta.28

Channel

Channel.filterArrayEffectconsteffect/Channel.ts:3482
<OutElem, E, R>(
  predicate: (
    a: Types.NoInfer<OutElem>,
    index: number
  ) => Effect.Effect<boolean, E, R>
): <OutErr, OutDone, InElem, InErr, InDone, Env>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >
) => Channel<
  Arr.NonEmptyReadonlyArray<OutElem>,
  OutErr | E,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env | R
>
<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, E, R>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >,
  predicate: (
    a: Types.NoInfer<OutElem>,
    index: number
  ) => Effect.Effect<boolean, E, R>
): Channel<
  Arr.NonEmptyReadonlyArray<OutElem>,
  OutErr | E,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env | R
>

Filters each element inside emitted non-empty arrays with an effectful predicate.

When to use

Use when filtering array-valued channel outputs requires Effects or services, and arrays that become empty should be skipped.

Details

The predicate receives the element and its index within the array. Elements for which the predicate succeeds with true are kept. Arrays that become empty are discarded. Predicate failures fail the returned channel.

filtering
Source effect/Channel.ts:348223 lines
export const filterArrayEffect: {
  <OutElem, E, R>(
    predicate: (a: Types.NoInfer<OutElem>, index: number) => Effect.Effect<boolean, E, R>
  ): <OutErr, OutDone, InElem, InErr, InDone, Env>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>
  ) => Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr | E, OutDone, InElem, InErr, InDone, Env | R>
  <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, E, R>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
    predicate: (a: Types.NoInfer<OutElem>, index: number) => Effect.Effect<boolean, E, R>
  ): Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr | E, OutDone, InElem, InErr, InDone, Env | R>
} = dual(2, <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, E, R>(
  self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
  predicate: (a: Types.NoInfer<OutElem>, index: number) => Effect.Effect<boolean, E, R>
): Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr | E, OutDone, InElem, InErr, InDone, Env | R> =>
  transformPull(self, (pull) => {
    const f = Effect.flatMap(pull, (arr) => Effect.filter(arr, predicate))
    return Effect.succeed(Effect.flatMap(
      f,
      function loop(arr): Pull.Pull<Arr.NonEmptyReadonlyArray<OutElem>, OutErr | E, OutDone, R> {
        return Arr.isReadonlyArrayNonEmpty(arr) ? Effect.succeed(arr) : Effect.flatMap(f, loop)
      }
    ))
  }))
Referenced by 1 symbols