import type * as CL from "../../Clock"
import * as SC from "../../Schedule"
import { Stream } from "./definitions"
/**
 * When the stream fails, retry it according to the given schedule
 *
 * This retries the entire stream, so will re-execute all of the stream's acquire operations.
 *
 * The schedule is reset as soon as the first element passes through the stream again.
 *
 * @param schedule Schedule receiving as input the errors of the stream
 * @return Stream outputting elements of all attempts of the stream
 */
export declare function retry_<R, R1, E, O>(
  self: Stream<R, E, O>,
  schedule: SC.Schedule<R1, E, void>
): Stream<R & R1 & CL.HasClock, E, O>
/**
 * When the stream fails, retry it according to the given schedule
 *
 * This retries the entire stream, so will re-execute all of the stream's acquire operations.
 *
 * The schedule is reset as soon as the first element passes through the stream again.
 *
 * @param schedule Schedule receiving as input the errors of the stream
 * @return Stream outputting elements of all attempts of the stream
 */
export declare function retry<R1, E>(
  schedule: SC.Schedule<R1, E, void>
): <R, O>(
  self: Stream<R, E, O>
) => Stream<R & R1 & import("../../Has").Has<CL.Clock>, E, O>
//# sourceMappingURL=retry.d.ts.map
