effect-io-ai

Package: effect
Module: Equivalence

Equivalence.mapInput

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

Signature

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>; }

Source

Since v2.0.0