open infix fun <E, A> suspend EagerEffectScope<E>.() -> A.catch(recover: EagerEffectScope<R>.(E) -> A): A(source)

When the EagerEffect has shifted with R it will recover the shifted value to A, and when it ran the computation to completion it will return the value A. catch is used in combination with attempt.

import arrow.core.Either
import arrow.core.None
import arrow.core.Option
import arrow.core.Validated
import arrow.core.continuations.eagerEffect
import io.kotest.matchers.shouldBe

fun main() {
eagerEffect<String, Int> {
val x = Either.Right(1).bind()
val y = Validated.Valid(2).bind()
val z =
attempt { None.bind { "Option was empty" } } catch { 0 }
x + y + z
}.fold({ fail("Shift can never be the result") }, { it shouldBe 3 })