Skip to content

Equality

Equality: object

Defined in: Core/Equality.ts:14

and: <A>(eq2) => (eq1) => Equality<A>

Combines two equalities with logical AND. Both must pass for two values to be considered equal. Data-last: the first equality is the data being piped.

A

Equality<A>

(eq1) => Equality<A>

const exact = pipe(byName, Equality.and(byRole));
exact(userA, userB); // true only if name AND role match

array: <A>(eq) => Equality<readonly A[]>

Lifts an element equality into an array equality. Two arrays are equal if they have the same length and every element pair is equal under eq.

A

Equality<A>

Equality<readonly A[]>

Equality.array(Equality.number)([1, 2, 3], [1, 2, 3]); // true

boolean: Equality<boolean> = booleanEq

Equality for booleans.

Equality.boolean(true, true); // true

by: <A, B>(f) => (eq) => Equality<B>

Adapts an equality for type A into an equality for type B by extracting a field. Read as “equality by this field”: pipe(Equality.string, Equality.by(u => u.name)).

A

B

(b) => A

(eq) => Equality<B>

type Product = { id: string; price: number };
const byId = pipe(Equality.string, Equality.by((p: Product) => p.id));
byId({ id: "p1", price: 9 }, { id: "p1", price: 12 }); // true

date: Equality<Date> = dateEq

Equality for Date values. Compares by numeric time value.

Equality.date(new Date("2024-01-01"), new Date("2024-01-01")); // true

number: Equality<number> = numberEq

Equality for numbers. Uses strict equality.

Equality.number(42, 42); // true

string: Equality<string> = stringEq

Equality for strings. Case-sensitive.

Equality.string("hello", "hello"); // true
Equality.string("hello", "Hello"); // false

struct: <R>(fields) => Equality<R>

Derives deep equality for a record from field-level Equality checkers.

R extends Record<string, unknown>

{ [K in string | number | symbol]: Equality<R[K]> }

Equality<R>

const userEq = Equality.struct({
  id: Equality.string,
  age: Equality.number,
});

tuple: <T>(…equalities) => Equality<T>

Derives element-wise equality for a tuple from positional Equality checkers.

T extends readonly unknown[]

…{ [K in string | number | symbol]: Equality<T[K]> }

Equality<T>

const pairEq = Equality.tuple(Equality.string, Equality.number);
pairEq(["a", 1], ["a", 1]); // true