Hyperlinkv0.8.0-beta.28

Effect

Effect.catchFilterconsteffect/Effect.ts:3354
<E, EB, A2, E2, R2, X, A3 = unassigned, E3 = never, R3 = never>(
  filter: Filter.Filter<NoInfer<E>, EB, X>,
  f: (e: EB) => Effect<A2, E2, R2>,
  orElse?: ((e: X) => Effect<A3, E3, R3>) | undefined
): <A, R>(
  self: Effect<A, E, R>
) => Effect<
  A | A2 | Exclude<A3, unassigned>,
  E2 | E3 | (A3 extends unassigned ? X : never),
  R | R2 | R3
>
<A, E, R, EB, A2, E2, R2, X, A3 = unassigned, E3 = never, R3 = never>(
  self: Effect<A, E, R>,
  filter: Filter.Filter<NoInfer<E>, EB, X>,
  f: (e: EB) => Effect<A2, E2, R2>,
  orElse?: ((e: X) => Effect<A3, E3, R3>) | undefined
): Effect<
  A | A2 | Exclude<A3, unassigned>,
  E2 | E3 | (A3 extends unassigned ? X : never),
  R | R2 | R3
>

Recovers from specific errors using a Filter.

When to use

Use to recover from typed Effect errors with a reusable Filter when matching can also narrow or transform the error before choosing the recovery effect.

Details

The filter runs on typed failures extracted from the Cause. Successful filter results are passed to f; failed filter results are passed to orElse when provided. Without orElse, the original failure cause is preserved.

Source effect/Effect.ts:335415 lines
export const catchFilter: {
  <E, EB, A2, E2, R2, X, A3 = unassigned, E3 = never, R3 = never>(
    filter: Filter.Filter<NoInfer<E>, EB, X>,
    f: (e: EB) => Effect<A2, E2, R2>,
    orElse?: ((e: X) => Effect<A3, E3, R3>) | undefined
  ): <A, R>(
    self: Effect<A, E, R>
  ) => Effect<A | A2 | Exclude<A3, unassigned>, E2 | E3 | (A3 extends unassigned ? X : never), R | R2 | R3>
  <A, E, R, EB, A2, E2, R2, X, A3 = unassigned, E3 = never, R3 = never>(
    self: Effect<A, E, R>,
    filter: Filter.Filter<NoInfer<E>, EB, X>,
    f: (e: EB) => Effect<A2, E2, R2>,
    orElse?: ((e: X) => Effect<A3, E3, R3>) | undefined
  ): Effect<A | A2 | Exclude<A3, unassigned>, E2 | E3 | (A3 extends unassigned ? X : never), R | R2 | R3>
} = internal.catchFilter