Hyperlinkv0.8.0-beta.28

Channel

Channel.filterMapArrayconsteffect/Channel.ts:3433
<OutElem, B, X>(filter: Filter.Filter<Types.NoInfer<OutElem>, B, X>): <
  OutErr,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env
>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >
) => Channel<
  Arr.NonEmptyReadonlyArray<B>,
  OutErr,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env
>
<OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X>(
  self: Channel<
    Arr.NonEmptyReadonlyArray<OutElem>,
    OutErr,
    OutDone,
    InElem,
    InErr,
    InDone,
    Env
  >,
  filter: Filter.Filter<OutElem, B, X>
): Channel<
  Arr.NonEmptyReadonlyArray<B>,
  OutErr,
  OutDone,
  InElem,
  InErr,
  InDone,
  Env
>

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

Details

Successful filter results are kept as mapped values. Failed filter results are removed from the array. Arrays that become empty are discarded.

filtering
Source effect/Channel.ts:343330 lines
export const filterMapArray: {
  <OutElem, B, X>(
    filter: Filter.Filter<Types.NoInfer<OutElem>, B, X>
  ): <OutErr, OutDone, InElem, InErr, InDone, Env>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>
  ) => Channel<Arr.NonEmptyReadonlyArray<B>, OutErr, OutDone, InElem, InErr, InDone, Env>
  <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X>(
    self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
    filter: Filter.Filter<OutElem, B, X>
  ): Channel<Arr.NonEmptyReadonlyArray<B>, OutErr, OutDone, InElem, InErr, InDone, Env>
} = dual(2, <OutElem, OutErr, OutDone, InElem, InErr, InDone, Env, B, X>(
  self: Channel<Arr.NonEmptyReadonlyArray<OutElem>, OutErr, OutDone, InElem, InErr, InDone, Env>,
  filter: Filter.Filter<OutElem, B, X>
): Channel<Arr.NonEmptyReadonlyArray<B>, OutErr, OutDone, InElem, InErr, InDone, Env> =>
  transformPull(self, (pull) =>
    Effect.succeed(Effect.flatMap(
      pull,
      function loop(arr): Pull.Pull<Arr.NonEmptyReadonlyArray<B>, OutErr, OutDone> {
        const passes: Array<B> = []
        for (let i = 0; i < arr.length; i++) {
          const result = filter(arr[i])
          if (Result.isSuccess(result)) {
            passes.push(result.success)
          }
        }
        return Arr.isReadonlyArrayNonEmpty(passes)
          ? Effect.succeed(passes)
          : Effect.flatMap(pull, loop)
      }
    ))))
Referenced by 1 symbols