Package: effect
Module: Equivalence
Transforms an equivalence relation by mapping the input values before comparison.
When to use
Use when you need an equivalence for one type by comparing a derived value.
Details
Example (Deriving equivalence from an object property)
import { Equivalence } from "effect"
interface User {
id: number
name: string
email: string
}
// Create equivalence based on user ID only
const userByIdEq = Equivalence.mapInput(
Equivalence.strictEqual<number>(),
(user: User) => user.id
)
const user1 = { id: 1, name: "Alice", email: "alice@example.com" }
const user2 = { id: 1, name: "Alice Smith", email: "alice.smith@example.com" }
const user3 = { id: 2, name: "Bob", email: "bob@example.com" }
console.log(userByIdEq(user1, user2)) // true (same ID)
console.log(userByIdEq(user1, user3)) // false (different ID)
Example (Case-insensitive string equivalence)
import { Equivalence } from "effect"
const caseInsensitiveEq = Equivalence.mapInput(
Equivalence.strictEqual<string>(),
(s: string) => s.toLowerCase()
)
console.log(caseInsensitiveEq("Hello", "HELLO")) // true
console.log(caseInsensitiveEq("Hello", "World")) // false
See
combineStructSignature
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>; }
Since v2.0.0