import { Stream } from "@effect/core/stream/Stream/definition";
import { GroupBy } from "@effect/core/stream/GroupBy/definition/base";
/**
 * Partition a stream using a function and process each stream individually.
 * This returns a data structure that can be used to further filter down which
 * groups shall be processed.
 *
 * After calling apply on the GroupBy object, the remaining groups will be
 * processed in parallel and the resulting streams merged in a
 * nondeterministic fashion.
 *
 * Up to `buffer` elements may be buffered in any group stream before the
 * producer is backpressured. Take care to consume from all streams in order
 * to prevent deadlocks.
 * @tsplus fluent ets/Stream groupByKey
 * @tsplus location "@effect/core/stream/Stream/operations/groupByKey"
 */
export declare function groupByKey_<R, E, A, K>(self: Stream<R, E, A>, f: (a: A) => K, buffer?: number, __tsplusTrace?: string): GroupBy<R, E, K, A, A>;
/**
 * Partition a stream using a function and process each stream individually.
 * This returns a data structure that can be used to further filter down which
 * groups shall be processed.
 *
 * After calling apply on the GroupBy object, the remaining groups will be
 * processed in parallel and the resulting streams merged in a
 * nondeterministic fashion.
 *
 * Up to `buffer` elements may be buffered in any group stream before the
 * producer is backpressured. Take care to consume from all streams in order
 * to prevent deadlocks.
 * @tsplus static ets/Stream/Aspects groupByKey
 * @tsplus pipeable ets/Stream groupByKey
 * @tsplus location "@effect/core/stream/Stream/operations/groupByKey"
 */
export declare const groupByKey: <A, K>(f: (a: A) => K, buffer?: number, __tsplusTrace?: string) => <R, E>(self: import("../definition").Stream<R, E, A>) => import("../../GroupBy").GroupBy<R, E, K, A, A>;
//# sourceMappingURL=groupByKey.d.ts.map