import { Chunk } from "@tsplus/stdlib/collections/Chunk/definition";
import { Tuple } from "@tsplus/stdlib/data/Tuple/definition";
import { SortedByKey } from "@effect/core/stream/SortedByKey/definition";
import { Ord } from "@tsplus/stdlib/prelude/Ord/definition";
import { LazyArg } from "@tsplus/stdlib/data/Function";
import { Stream } from "@effect/core/stream/Stream/definition";
import { Effect } from "@effect/core/io/Effect/definition";
import { Maybe } from "@tsplus/stdlib/data/Maybe/definition";
import { Exit } from "@effect/core/io/Exit/definition";
export declare class DrainLeft {
    readonly _tag = "DrainLeft";
}
export declare class DrainRight {
    readonly _tag = "DrainRight";
}
export declare class PullBoth {
    readonly _tag = "PullBoth";
}
export declare class PullLeft<K, B> {
    readonly rightChunk: Chunk<Tuple<[K, B]>>;
    readonly _tag = "PullLeft";
    constructor(rightChunk: Chunk<Tuple<[K, B]>>);
}
export declare class PullRight<K, A> {
    readonly leftChunk: Chunk<Tuple<[K, A]>>;
    readonly _tag = "PullRight";
    constructor(leftChunk: Chunk<Tuple<[K, A]>>);
}
/**
 * Zips this stream that is sorted by distinct keys and the specified stream
 * that is sorted by distinct keys to produce a new stream that is sorted by
 * distinct keys. Uses the functions `left`, `right`, and `both` to handle
 * the cases where a key and value exist in this stream, that stream, or
 * both streams.
 *
 * This allows zipping potentially unbounded streams of data by key in
 * constant space but the caller is responsible for ensuring that the
 * streams are sorted by distinct keys.
 * @tsplus fluent ets/SortedByKey zipAllSortedByKeyWith
 * @tsplus fluent ets/Stream zipAllSortedByKeyWith
 * @tsplus location "@effect/core/stream/SortedByKey/operations/zipAllSortedByKeyWith"
 */
export declare function zipAllSortedByKeyWith_<R, E, K, A>(self: SortedByKey<R, E, K, A>, ord: Ord<K>): <R2, E2, B, C1, C2, C3>(that: import("@tsplus/stdlib/data/Function").LazyArg<import("../definition").SortedByKey<R2, E2, K, B>>, left: (a: A) => C1, right: (b: B) => C2, both: (a: A, b: B) => C3, __tsplusTrace?: string) => import("../../Stream").Stream<R | R2, E | E2, import("@tsplus/stdlib/data/Tuple").Tuple<[K, C1 | C2 | C3]>>;
/**
 * Zips this stream that is sorted by distinct keys and the specified stream
 * that is sorted by distinct keys to produce a new stream that is sorted by
 * distinct keys. Uses the functions `left`, `right`, and `both` to handle
 * the cases where a key and value exist in this stream, that stream, or
 * both streams.
 *
 * This allows zipping potentially unbounded streams of data by key in
 * constant space but the caller is responsible for ensuring that the
 * streams are sorted by distinct keys.
 * @tsplus static ets/SortedByKey/Aspects zipAllSortedByKeyWith
 * @tsplus pipeable ets/SortedByKey zipAllSortedByKeyWith
 * @tsplus location "@effect/core/stream/SortedByKey/operations/zipAllSortedByKeyWith"
 */
export declare const zipAllSortedByKeyWith: <K>(ord: import("@tsplus/stdlib/prelude/Ord").Ord<K>) => <R, E, A>(self: import("../definition").SortedByKey<R, E, K, A>) => <R2, E2, B, C1, C2, C3>(that: import("@tsplus/stdlib/data/Function").LazyArg<import("../definition").SortedByKey<R2, E2, K, B>>, left: (a: A) => C1, right: (b: B) => C2, both: (a: A, b: B) => C3, __tsplusTrace?: string) => import("../../Stream").Stream<R | R2, E | E2, import("@tsplus/stdlib/data/Tuple").Tuple<[K, C1 | C2 | C3]>>;
//# sourceMappingURL=zipAllSortedByKeyWith.d.ts.map