Equivalence.ts overview
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”.
Since v2.0.0
Exports Grouped by Category
combinators
array
Creates a new Equivalence
for an array of values based on a given Equivalence
for the elements of the array.
Signature
declare const array: <A>(item: Equivalence<A>) => Equivalence<ReadonlyArray<A>>
Since v2.0.0
struct
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.
Signature
declare const struct: <R extends Record<string, Equivalence<any>>>(
fields: R
) => Equivalence<{ readonly [K in keyof R]: [R[K]] extends [Equivalence<infer A>] ? A : never }>
Since v2.0.0
tuple
Similar to Promise.all
but operates on Equivalence
s.
[Equivalence<A>, Equivalence<B>, ...] -> 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.
Signature
declare const tuple: <T extends ReadonlyArray<Equivalence<any>>>(
...elements: T
) => Equivalence<Readonly<{ [I in keyof T]: [T[I]] extends [Equivalence<infer A>] ? A : never }>>
Since v2.0.0
combining
all
Signature
declare const all: <A>(collection: Iterable<Equivalence<A>>) => Equivalence<ReadonlyArray<A>>
Since v2.0.0
combine
Signature
declare const combine: {
<A>(that: Equivalence<A>): (self: Equivalence<A>) => Equivalence<A>
<A>(self: Equivalence<A>, that: Equivalence<A>): Equivalence<A>
}
Since v2.0.0
combineAll
Signature
declare const combineAll: <A>(collection: Iterable<Equivalence<A>>) => Equivalence<A>
Since v2.0.0
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>
}
Since v2.0.0
product
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]>
}
Since v2.0.0
productMany
Signature
declare const productMany: <A>(
self: Equivalence<A>,
collection: Iterable<Equivalence<A>>
) => Equivalence<readonly [A, ...Array<A>]>
Since v2.0.0
constructors
make
Signature
declare const make: <A>(isEquivalent: (self: A, that: A) => boolean) => Equivalence<A>
Since v2.0.0
strict
Return an Equivalence
that uses strict equality (===) to compare values.
Signature
declare const strict: <A>() => Equivalence<A>
Since v2.0.0
instances
Date
Signature
declare const Date: Equivalence<Date>
Since v2.0.0
bigint
Signature
declare const bigint: Equivalence<bigint>
Since v2.0.0
boolean
Signature
declare const boolean: Equivalence<boolean>
Since v2.0.0
number
Signature
declare const number: Equivalence<number>
Since v2.0.0
string
Signature
declare const string: Equivalence<string>
Since v2.0.0
symbol
Signature
declare const symbol: Equivalence<symbol>
Since v2.0.0
mapping
mapInput
Signature
declare const mapInput: {
<B, A>(f: (b: B) => A): (self: Equivalence<A>) => Equivalence<B>
<A, B>(self: Equivalence<A>, f: (b: B) => A): Equivalence<B>
}
Since v2.0.0
type class
Equivalence (interface)
Signature
export interface Equivalence<in A> {
(self: A, that: A): boolean
}
Since v2.0.0
type lambdas
EquivalenceTypeLambda (interface)
Signature
export interface EquivalenceTypeLambda extends TypeLambda {
readonly type: Equivalence<this["Target"]>
}
Since v2.0.0