import type { TypeLambda } from "./HKT.js"; /** * @category type class * @since 2.0.0 */ export interface Equivalence { (self: A, that: A): boolean; } /** * @category type lambdas * @since 2.0.0 */ export interface EquivalenceTypeLambda extends TypeLambda { readonly type: Equivalence; } /** * @category constructors * @since 2.0.0 */ export declare const make: (isEquivalent: (self: A, that: A) => boolean) => Equivalence; /** * Return an `Equivalence` that uses strict equality (===) to compare values. * * @since 2.0.0 * @category constructors */ export declare const strict: () => Equivalence; /** * @category instances * @since 2.0.0 */ export declare const string: Equivalence; /** * @category instances * @since 2.0.0 */ export declare const number: Equivalence; /** * @category instances * @since 2.0.0 */ export declare const boolean: Equivalence; /** * @category instances * @since 2.0.0 */ export declare const bigint: Equivalence; /** * @category instances * @since 2.0.0 */ export declare const symbol: Equivalence; /** * @category combining * @since 2.0.0 */ export declare const combine: { /** * @category combining * @since 2.0.0 */ (that: Equivalence): (self: Equivalence) => Equivalence; /** * @category combining * @since 2.0.0 */ (self: Equivalence, that: Equivalence): Equivalence; }; /** * @category combining * @since 2.0.0 */ export declare const combineMany: { /** * @category combining * @since 2.0.0 */ (collection: Iterable>): (self: Equivalence) => Equivalence; /** * @category combining * @since 2.0.0 */ (self: Equivalence, collection: Iterable>): Equivalence; }; /** * @category combining * @since 2.0.0 */ export declare const combineAll: (collection: Iterable>) => Equivalence; /** * @category mapping * @since 2.0.0 */ export declare const mapInput: { /** * @category mapping * @since 2.0.0 */ (f: (b: B) => A): (self: Equivalence) => Equivalence; /** * @category mapping * @since 2.0.0 */ (self: Equivalence, f: (b: B) => A): Equivalence; }; /** * @category instances * @since 2.0.0 */ export declare const Date: Equivalence; /** * @category combining * @since 2.0.0 */ export declare const product: { (that: Equivalence): (self: Equivalence) => Equivalence; (self: Equivalence, that: Equivalence): Equivalence; }; /** * @category combining * @since 2.0.0 */ export declare const all: (collection: Iterable>) => Equivalence>; /** * @category combining * @since 2.0.0 */ export declare const productMany: (self: Equivalence, collection: Iterable>) => Equivalence]>; /** * Similar to `Promise.all` but operates on `Equivalence`s. * * ```ts skip-type-checking * [Equivalence, Equivalence, ...] -> Equivalence<[A, B, ...]> * ``` * * Given a tuple of `Equivalence`s returns a new `Equivalence` that compares values of a tuple * by applying each `Equivalence` to the corresponding element of the tuple. * * @category combinators * @since 2.0.0 */ export declare const tuple: >>(...elements: T) => Equivalence] ? A : never; }>>; /** * Creates a new `Equivalence` for an array of values based on a given `Equivalence` for the elements of the array. * * @category combinators * @since 2.0.0 */ export declare const array: (item: Equivalence) => Equivalence>; /** * Given a struct of `Equivalence`s returns a new `Equivalence` that compares values of a struct * by applying each `Equivalence` to the corresponding property of the struct. * * @category combinators * @since 2.0.0 */ export declare const struct: >>(fields: R) => Equivalence<{ readonly [K in keyof R]: [R[K]] extends [Equivalence] ? A : never; }>; //# sourceMappingURL=Equivalence.d.ts.map