(self: Date, that: Date): booleanEquivalence instance for Date objects that compares their getTime() values using Equivalence.Number.
When to use
Use when you need an Equivalence for JavaScript date objects by their
millisecond timestamp.
Details
Different Date instances that represent the same millisecond timestamp are equivalent. Because Equivalence.Number
treats NaN as equal to NaN, two invalid Date values are also considered equivalent.
Example (Comparing Date values)
import { Equivalence } from "effect"
const d1 = new Date("2020-01-01T00:00:00.000Z")
const d2 = new Date("2020-01-01T00:00:00.000Z")
const d3 = new Date("2021-01-01T00:00:00.000Z")
const invalidDate1 = new Date("foo")
const invalidDate2 = new Date("bar")
console.log(Equivalence.Date(d1, d2)) // true
console.log(Equivalence.Date(d1, d3)) // false
console.log(Equivalence.Date(invalidDate1, invalidDate2)) // true
console.log(Equivalence.Date(invalidDate1, d1)) // falseExample (Comparing reference and value equality)
import { Equivalence } from "effect"
const d1 = new Date(0)
const d2 = new Date(0)
console.log(d1 === d2) // false (different references)
console.log(Equivalence.Date(d1, d2)) // true (same time value)export const const Date: Equivalence<Date>Equivalence instance for Date objects that compares their getTime() values using Equivalence.Number.
When to use
Use when you need an Equivalence for JavaScript date objects by their
millisecond timestamp.
Details
Different Date instances that represent the same millisecond timestamp are equivalent. Because Equivalence.Number
treats NaN as equal to NaN, two invalid Date values are also considered equivalent.
Example (Comparing Date values)
import { Equivalence } from "effect"
const d1 = new Date("2020-01-01T00:00:00.000Z")
const d2 = new Date("2020-01-01T00:00:00.000Z")
const d3 = new Date("2021-01-01T00:00:00.000Z")
const invalidDate1 = new Date("foo")
const invalidDate2 = new Date("bar")
console.log(Equivalence.Date(d1, d2)) // true
console.log(Equivalence.Date(d1, d3)) // false
console.log(Equivalence.Date(invalidDate1, invalidDate2)) // true
console.log(Equivalence.Date(invalidDate1, d1)) // false
Example (Comparing reference and value equality)
import { Equivalence } from "effect"
const d1 = new Date(0)
const d2 = new Date(0)
console.log(d1 === d2) // false (different references)
console.log(Equivalence.Date(d1, d2)) // true (same time value)
Date: 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<Date> = const mapInput: {
<B, A>(f: (b: B) => A): (
self: Equivalence<A>
) => Equivalence<B>
<A, B>(
self: Equivalence<A>,
f: (b: B) => A
): Equivalence<B>
}
mapInput(
const Number: Equivalence<number>Equivalence instance for numbers.
When to use
Use when you need numeric equality that treats NaN as equal to itself.
Example (Comparing numbers)
import { Equivalence } from "effect"
console.log(Equivalence.Number(1, 1)) // true
console.log(Equivalence.Number(1, 2)) // false
console.log(Equivalence.Number(NaN, NaN)) // true
Number,
(d: Dated: Date) => d: Dated.Date.getTime(): numberReturns the stored time value in milliseconds since midnight, January 1, 1970 UTC.
getTime()
)