/** * Retries this effect until its error satisfies the specified effectful * predicate. * * @tsplus static effect/core/io/Effect.Aspects retryUntilEffect * @tsplus pipeable effect/core/io/Effect retryUntilEffect */ export function retryUntilEffect(f: (e: E) => Effect) { return (self: Effect): Effect => self.catchAll((e) => f(e).flatMap((b) => b ? Effect.fail(e) : Effect.yieldNow > self.retryUntilEffect(f) ) ) }