Equivalence
This module provides an implementation of the Equivalence type class, which defines a binary relation that is reflexive, symmetric, and transitive. In other words, it defines a notion of equivalence between values of a certain type. These properties are also known in mathematics as an "equivalence relation".
Combinators
Signature
declare function array<A>(item: Equivalence<A>): Equivalence<readonly Array<A>>Given a struct of Equivalences returns a new Equivalence that compares values of a struct by applying each Equivalence to the corresponding property of the struct.
Signature
declare function struct<R extends Record<string, Equivalence<any>>>(
fields: R,
): Equivalence<{ [K in string | number | symbol]: [R[K]] extends [Equivalence<A>] ? A : never }>;Similar to Promise.all but operates on Equivalences.
``ts skip-type-checking [Equivalence<A>, Equivalence<B>, ...] -> Equivalence<[A, B, ...]> ``
Given a tuple of Equivalences returns a new Equivalence that compares values of a tuple by applying each Equivalence to the corresponding element of the tuple.
Signature
declare function tuple<T extends readonly Array<Equivalence<any>>>(...elements: T): Equivalence<Readonly<{ [I in string | number | symbol]: [T[I]] extends [Equivalence<A>] ? A : never }>>Combining
Signature
declare function all<A>(collection: Iterable<Equivalence<A>>): Equivalence<readonly Array<A>>Signature
declare const combine: {
<A>(that: Equivalence<A>): (self: Equivalence<A>) => Equivalence<A>;
<A>(self: Equivalence<A>, that: Equivalence<A>): Equivalence<A>;
};combineAll
Signature
declare function combineAll<A>(collection: Iterable<Equivalence<A>>): Equivalence<A>;combineMany
Signature
declare const combineMany: {
<A>(collection: Iterable<Equivalence<A>>): (self: Equivalence<A>) => Equivalence<A>;
<A>(self: Equivalence<A>, collection: Iterable<Equivalence<A>>): Equivalence<A>;
};Signature
declare const product: {
<B>(that: Equivalence<B>): <A>(self: Equivalence<A>) => Equivalence<readonly [A, B]>;
<A, B>(self: Equivalence<A>, that: Equivalence<B>): Equivalence<readonly [A, B]>;
};productMany
Signature
declare function productMany<A>(
self: Equivalence<A>,
collection: Iterable<Equivalence<A>>,
): Equivalence<readonly [A, A]>;Constructors
Instances
Signature
declare const bigint: Equivalence<bigint>;Signature
declare const boolean: Equivalence<boolean>;Signature
declare const Date: Equivalence<Date>;Signature
declare const number: Equivalence<number>;Signature
declare const string: Equivalence<string>;Signature
declare const symbol: Equivalence<symbol>;Mapping
Type Class
Equivalence interface
Signature
interface Equivalence<in A> {
(self: A, that: A): boolean;
}Type Lambdas
EquivalenceTypeLambda interface
Signature
interface EquivalenceTypeLambda extends TypeLambda {
readonly type: Equivalence<unknown>;
}
Creates a new
Equivalencefor an array of values based on a givenEquivalencefor the elements of the array.