<A>(): Equivalence<A>Creates an equivalence relation that uses strict equality (===) to compare values.
When to use
Use when you need strict equality (===) as the comparison.
Details
Uses JavaScript's strict equality operator (===). Primitives compare by
value. Objects compare by reference, so only the same object instance is
equivalent. Use this as a building block for more complex equivalences via
mapInput or combine.
Gotchas
NaN !== NaN, so NaN values are never considered equivalent.
Example (Comparing primitive types)
import { Equivalence } from "effect"
const strictEq = Equivalence.strictEqual<number>()
console.log(strictEq(1, 1)) // true
console.log(strictEq(1, 2)) // false
console.log(strictEq(NaN, NaN)) // false (NaN !== NaN)Example (Comparing objects by reference)
import { Equivalence } from "effect"
const obj = { value: 42 }
const strictObjEq = Equivalence.strictEqual<typeof obj>()
console.log(strictObjEq(obj, obj)) // true
console.log(strictObjEq(obj, { value: 42 })) // false (different references)export const const strictEqual: <A>() => Equivalence<A>Creates an equivalence relation that uses strict equality (===) to compare values.
When to use
Use when you need strict equality (===) as the comparison.
Details
Uses JavaScript's strict equality operator (===). Primitives compare by
value. Objects compare by reference, so only the same object instance is
equivalent. Use this as a building block for more complex equivalences via
mapInput or combine.
Gotchas
NaN !== NaN, so NaN values are never considered equivalent.
Example (Comparing primitive types)
import { Equivalence } from "effect"
const strictEq = Equivalence.strictEqual<number>()
console.log(strictEq(1, 1)) // true
console.log(strictEq(1, 2)) // false
console.log(strictEq(NaN, NaN)) // false (NaN !== NaN)
Example (Comparing objects by reference)
import { Equivalence } from "effect"
const obj = { value: 42 }
const strictObjEq = Equivalence.strictEqual<typeof obj>()
console.log(strictObjEq(obj, obj)) // true
console.log(strictObjEq(obj, { value: 42 })) // false (different references)
strictEqual: <function (type parameter) A in <A>(): Equivalence<A>A>() => type Equivalence<in A> = (
self: A,
that: A
) => boolean
Represents an equivalence relation over type A.
When to use
Use as a type annotation when you accept or return an equivalence function.
Details
- Returns
boolean: true if values are equivalent, false otherwise
- Must satisfy reflexive, symmetric, and transitive properties
Example (Defining simple number equivalence)
import type { Equivalence } from "effect"
const numberEq: Equivalence.Equivalence<number> = (a, b) => a === b
console.log(numberEq(1, 1)) // true
console.log(numberEq(1, 2)) // false
Example (Defining custom object equivalence)
import type { Equivalence } from "effect"
interface Point {
x: number
y: number
}
const pointEq: Equivalence.Equivalence<Point> = (a, b) =>
a.x === b.x && a.y === b.y
console.log(pointEq({ x: 1, y: 2 }, { x: 1, y: 2 })) // true
Equivalence<function (type parameter) A in <A>(): Equivalence<A>A> = () => const isStrictEquivalent: (
x: unknown,
y: unknown
) => boolean
isStrictEquivalent