Package: effect
Module: Equivalence
Combines multiple equivalence relations into a single equivalence using logical AND.
When to use
Use when you need to combine many Equivalence instances from an iterable.
Details
Returns true only if all equivalences in the collection return true. The
comparison stops at the first equivalence that returns false. Empty
collections return an equivalence that always returns true. The result is
also an equivalence that satisfies reflexive, symmetric, and transitive
properties.
Example (Combining multiple field equivalences)
import { Equivalence } from "effect"
interface Point3D {
x: number
y: number
z: number
}
const xEq = Equivalence.mapInput(
Equivalence.strictEqual<number>(),
(p: Point3D) => p.x
)
const yEq = Equivalence.mapInput(
Equivalence.strictEqual<number>(),
(p: Point3D) => p.y
)
const zEq = Equivalence.mapInput(
Equivalence.strictEqual<number>(),
(p: Point3D) => p.z
)
const point3DEq = Equivalence.combineAll([xEq, yEq, zEq])
const point1 = { x: 1, y: 2, z: 3 }
const point2 = { x: 1, y: 2, z: 3 }
const point3 = { x: 1, y: 2, z: 4 }
console.log(point3DEq(point1, point2)) // true
console.log(point3DEq(point1, point3)) // false (different z)
Example (Handling empty collections)
import { Equivalence } from "effect"
// Empty collection always returns true
const alwaysEq = Equivalence.combineAll([])
console.log(alwaysEq("anything", "else")) // true
See
combinemapInputSignature
declare const combineAll: <A>(collection: Iterable<Equivalence<A>>) => Equivalence<A>
Since v2.0.0