Skip to content

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".

20 exports Added in v2.0.0 Source

Combinators

array

Added in v2.0.0 Source

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>>

struct

Added in v2.0.0 Source

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 }>;

tuple

Added in v2.0.0 Source

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

all

Added in v2.0.0 Source

Signature

declare function all<A>(collection: Iterable<Equivalence<A>>): Equivalence<readonly Array<A>>

combine

Added in v2.0.0 Source

Signature

declare const combine: {
  <A>(that: Equivalence<A>): (self: Equivalence<A>) => Equivalence<A>;
  <A>(self: Equivalence<A>, that: Equivalence<A>): Equivalence<A>;
};

combineAll

Added in v2.0.0 Source

Signature

declare function combineAll<A>(collection: Iterable<Equivalence<A>>): Equivalence<A>;

combineMany

Added in v2.0.0 Source

Signature

declare const combineMany: {
  <A>(collection: Iterable<Equivalence<A>>): (self: Equivalence<A>) => Equivalence<A>;
  <A>(self: Equivalence<A>, collection: Iterable<Equivalence<A>>): Equivalence<A>;
};

product

Added in v2.0.0 Source

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

Added in v2.0.0 Source

Signature

declare function productMany<A>(
  self: Equivalence<A>,
  collection: Iterable<Equivalence<A>>,
): Equivalence<readonly [A, A]>;

Constructors

make

Added in v2.0.0 Source

Signature

declare function make<A>(isEquivalent: (self: A, that: A) => boolean): Equivalence<A>;

strict

Added in v2.0.0 Source

Return an Equivalence that uses strict equality (===) to compare values.

Signature

declare const strict: <A>() => Equivalence<A>;

Instances

bigint

Added in v2.0.0 Source

Signature

declare const bigint: Equivalence<bigint>;

boolean

Added in v2.0.0 Source

Signature

declare const boolean: Equivalence<boolean>;

Date

Added in v2.0.0 Source

Signature

declare const Date: Equivalence<Date>;

number

Added in v2.0.0 Source

Signature

declare const number: Equivalence<number>;

string

Added in v2.0.0 Source

Signature

declare const string: Equivalence<string>;

symbol

Added in v2.0.0 Source

Signature

declare const symbol: Equivalence<symbol>;

Mapping

mapInput

Added in v2.0.0 Source

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>;
};

Type Class

Equivalence interface

Added in v2.0.0 Source

Signature

interface Equivalence<in A> {
  (self: A, that: A): boolean;
}

Type Lambdas

EquivalenceTypeLambda interface

Added in v2.0.0 Source

Signature

interface EquivalenceTypeLambda extends TypeLambda {
  readonly type: Equivalence<unknown>;
}