import { STM } from "@effect/core/stm/STM/definition/base";
import { Predicate } from "@tsplus/stdlib/data/Predicate";
/**
 * Repeats this `STM` effect until its result satisfies the specified
 * predicate. **WARNING**: `repeatUntil` uses a busy loop to repeat the
 * effect and will consume a thread until it completes (it cannot yield). This
 * is because STM describes a single atomic transaction which must either
 * complete, retry or fail a transaction before yielding back to the ZIO
 * Runtime.
 *   - Use `retryUntil` instead if you don't need to maintain transaction
 *     state for repeats.
 *   - Ensure repeating the STM effect will eventually satisfy the predicate.
 *   - Consider using the Blocking thread pool for execution of the
 *     transaction.
 * @tsplus fluent ets/STM repeatUntil
 * @tsplus location "@effect/core/stm/STM/operations/repeatUntil"
 */
export declare function repeatUntil_<R, E, A>(self: STM<R, E, A>, f: Predicate<A>): STM<R, E, A>;
/**
 * Repeats this `STM` effect until its result satisfies the specified
 * predicate. **WARNING**: `repeatUntil` uses a busy loop to repeat the
 * effect and will consume a thread until it completes (it cannot yield). This
 * is because STM describes a single atomic transaction which must either
 * complete, retry or fail a transaction before yielding back to the ZIO
 * Runtime.
 *   - Use `retryUntil` instead if you don't need to maintain transaction
 *     state for repeats.
 *   - Ensure repeating the STM effect will eventually satisfy the predicate.
 *   - Consider using the Blocking thread pool for execution of the
 *     transaction.
 * @tsplus static ets/STM/Aspects repeatUntil
 * @tsplus pipeable ets/STM repeatUntil
 * @tsplus location "@effect/core/stm/STM/operations/repeatUntil"
 */
export declare const repeatUntil: <A>(f: import("@tsplus/stdlib/data/Predicate").Predicate<A>) => <R, E>(self: import("../definition").STM<R, E, A>) => import("../definition").STM<R, E, A>;
//# sourceMappingURL=repeatUntil.d.ts.map