effect-io-ai

Package: effect
Module: Stream

Stream.catchCauseIf

Recovers from stream failures by filtering the Cause and switching to a recovery stream. Non-matching causes are re-emitted as failures.

Example (Catching matching causes)

import { Cause, Console, Effect, Stream } from "effect"

const program = Effect.gen(function*() {
  const failingStream = Stream.fail("NetworkError")
  const recovered = Stream.catchCauseIf(
    failingStream,
    (cause) => Cause.hasFails(cause),
    (cause) => Stream.make(`Recovered: ${Cause.squash(cause)}`)
  )

  const output = yield* Stream.runCollect(recovered)
  yield* Console.log(output)
})

Effect.runPromise(program)
// Output: [ "Recovered: NetworkError" ]

Signature

declare const catchCauseIf: { <E, A2, E2, R2>(predicate: Predicate<Cause.Cause<E>>, f: (cause: Cause.Cause<E>) => Stream<A2, E2, R2>): <A, R>(self: Stream<A, E, R>) => Stream<A | A2, E | E2, R2 | R>; <A, E, R, A2, E2, R2>(self: Stream<A, E, R>, predicate: Predicate<Cause.Cause<E>>, f: (cause: Cause.Cause<E>) => Stream<A2, E2, R2>): Stream<A | A2, E | E2, R | R2>; }

Source

Since v4.0.0