import * as Tp from "../../../../Collections/Immutable/Tuple";
import * as T from "../../../../Effect";
import * as Ex from "../../../../Exit";
import type { Predicate } from "../../../../Function";
import * as M from "../../../../Managed";
import * as O from "../../../../Option";
import * as Q from "../../../../Queue";
import type * as C from "../core";
/**
 * More powerful version of `Stream#distributedWith`. This returns a function that will produce
 * new queues and corresponding indices.
 * You can also provide a function that will be executed after the final events are enqueued in all queues.
 * Shutdown of the queues is handled by the driver.
 * Downstream users can also shutdown queues manually. In this case the driver will
 * continue but no longer backpressure on them.
 */
export declare function distributedWithDynamic_<R, E, A, A1>(self: C.Stream<R, E, A>, maximumLag: number, decide: (a: A) => T.UIO<Predicate<number>>, done: (ex: Ex.Exit<O.Option<E>, never>) => T.UIO<A1>): M.RIO<R, T.UIO<Tp.Tuple<[number, Q.Dequeue<Ex.Exit<O.Option<E>, A>>]>>>;
/**
 * More powerful version of `Stream#distributedWith`. This returns a function that will produce
 * new queues and corresponding indices.
 * You can also provide a function that will be executed after the final events are enqueued in all queues.
 * Shutdown of the queues is handled by the driver.
 * Downstream users can also shutdown queues manually. In this case the driver will
 * continue but no longer backpressure on them.
 *
 * @ets_data_first distributedWithDynamic_
 */
export declare function distributedWithDynamic<E, A, A1>(maximumLag: number, decide: (a: A) => T.UIO<Predicate<number>>, done: (ex: Ex.Exit<O.Option<E>, never>) => T.UIO<A1>): <R>(self: C.Stream<R, E, A>) => M.RIO<R, T.UIO<Tp.Tuple<[number, Q.Dequeue<Ex.Exit<O.Option<E>, A>>]>>>;
//# sourceMappingURL=distributedWithDynamic.d.ts.map