import * as Ord from "@effect-ts/system/Ord";
import type { Associative } from "./definition.js";
/**
* Fold `Associative` through an `Array`
*/
export declare function fold(S: Associative): (a: A) => (as: ReadonlyArray) => A;
/**
* `Associative` that returns first element
*/
export declare function first(): Associative;
/**
* `Associative` that returns last element
*/
export declare function last(): Associative;
/**
* Given a tuple of `Associative` returns an `Associative` for the tuple
*/
export declare function tuple>>(...associatives: T): Associative<{
[K in keyof T]: T[K] extends Associative ? A : never;
}>;
/**
* The dual of a `Associative`, obtained by swapping the arguments of `combine`.
*/
export declare function inverted(S: Associative): Associative;
/**
* `Associative` for function combination
*/
export declare function func(S: Associative): () => Associative<(a: A) => S>;
/**
* `Associative` for a structure
*/
export declare function struct>(associatives: {
[K in keyof O]: Associative;
}): Associative;
/**
* `Associative` that returns last `Min` of elements
*/
export declare function min(O: Ord.Ord): Associative;
/**
* `Associative` that returns last `Max` of elements
*/
export declare function max(O: Ord.Ord): Associative;
/**
* Returns a `Associative` instance for objects preserving their type
*/
export declare function object(): Associative;
/**
* You can glue items between and stay associative
*/
export declare function intercalate(a: A): (S: Associative) => Associative;
export * from "./definition.js";
//# sourceMappingURL=operations.d.ts.map