import { Covariant as CO } from '@effect/typeclass';
import { Array as AR } from 'effect';
import { TypeLambda } from 'effect/HKT';
import { Algebra } from './folds.js';
/**
 * Convert a tuple of algebras into an algebra of a tuple.
 * @category ops
 */
export declare const zipFolds: <F extends TypeLambda>(F: CO.Covariant<F>) => <const Targets extends AR.NonEmptyArray<unknown>, E = unknown, R = never>(...[head, ...tail]: TupledAlgebras<F, Targets, E, R>) => Algebra<F, Targets, E, R>;
/**
 * Append an algebra to an algebra of a tuple.
 * @category ops
 */
export declare const appendFold: <F extends TypeLambda>(F: CO.Covariant<F>) => <const Targets extends AR.NonEmptyArray<unknown>, A, E = unknown, R = never>(algebra: Algebra<F, Targets, E, R>, append: Algebra<F, A, E, R>) => Algebra<F, [...Targets, A], E, R>;
/**
 * Convert an algebra of `A` into an algebra of `[A]`.
 * @category ops
 */
export declare const unaryTuple: <F extends TypeLambda>(F: CO.Covariant<F>) => <A, E = unknown, R = never>(fold: Algebra<F, A, E, R>) => Algebra<F, [A], E, R>;
/**
 * The type of a tuple of algebras with the given `Targets`.
 * @category ops
 */
export type TupledAlgebras<F extends TypeLambda, Targets extends [unknown, ...unknown[]], R = never, E = unknown> = {
    [K in keyof Targets]: Algebra<F, Targets[K], E, R>;
};
//# sourceMappingURL=tuple.d.ts.map