import { Sink } from "@effect/core/stream/Sink/definition/base";
import { LazyArg } from "@tsplus/stdlib/data/Function";
import { Exit } from "@effect/core/io/Exit/definition";
import { Either } from "@tsplus/stdlib/data/Either/definition";
import { Chunk } from "@tsplus/stdlib/collections/Chunk/definition";
import { MergeDecision } from "@effect/core/stream/Channel/MergeDecision";
/**
 * Runs both sinks in parallel on the input, using the specified merge
 * function as soon as one result or the other has been computed.
 * @tsplus fluent ets/Sink raceWith
 * @tsplus location "@effect/core/stream/Sink/operations/raceWith"
 */
export declare function raceWith_<R, R1, E, E1, In, In1, L, L1, Z, Z1, Z2>(self: Sink<R, E, In, L, Z>, that: LazyArg<Sink<R1, E1, In1, L1, Z1>>, leftDone: (exit: Exit<E, Z>) => MergeDecision<R1, E1, Z1, E | E1, Z2>, rightDone: (exit: Exit<E1, Z1>) => MergeDecision<R1, E, Z, E | E1, Z2>, capacity?: number, __tsplusTrace?: string): Sink<R | R1, E | E1, In & In1, L | L1, Z2>;
/**
 * Runs both sinks in parallel on the input, using the specified merge
 * function as soon as one result or the other has been computed.
 * @tsplus static ets/Sink/Aspects raceWith
 * @tsplus pipeable ets/Sink raceWith
 * @tsplus location "@effect/core/stream/Sink/operations/raceWith"
 */
export declare const raceWith: <R1, E, E1, In1, L1, Z, Z1, Z2>(that: import("@tsplus/stdlib/data/Function").LazyArg<import("../definition").Sink<R1, E1, In1, L1, Z1>>, leftDone: (exit: import("../../../io/Exit").Exit<E, Z>) => MergeDecision<R1, E1, Z1, E | E1, Z2>, rightDone: (exit: import("../../../io/Exit").Exit<E1, Z1>) => MergeDecision<R1, E, Z, E | E1, Z2>, capacity?: number, __tsplusTrace?: string) => <R, In, L>(self: import("../definition").Sink<R, E, In, L, Z>) => import("../definition").Sink<R | R1, E | E1, In & In1, L | L1, Z2>;
//# sourceMappingURL=raceWith.d.ts.map