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
Creates a new Equivalence for an array of values based on a given Equivalence for the elements of the array.
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.
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 }>>Example
[Equivalence<A>, Equivalence<B>, ...] -> Equivalence<[A, B, ...]>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>;}