Hyperlinkv0.8.0-beta.28

Struct

Struct.makeEquivalenceconsteffect/Struct.ts:515
<R extends Record<string, Equivalence.Equivalence<any>>>(
  fields: R
): Equivalence.Equivalence<{
  readonly [K in keyof R]: [R[K]] extends [
    Equivalence.Equivalence<infer A>
  ]
    ? A
    : never
}>

Creates an Equivalence for a struct by providing an Equivalence for each property. Two structs are equivalent when all their corresponding properties are equivalent.

When to use

Use when you need equality for a record-like object to be decided field by field, with a custom equality rule for each property.

Details

This is an alias of Equivalence.Struct. Each property's equivalence is checked independently; all must return true for the overall result to be true.

Example (Comparing structs for equivalence)

import { Equivalence, Struct } from "effect"

const PersonEquivalence = Struct.makeEquivalence({
  name: Equivalence.strictEqual<string>(),
  age: Equivalence.strictEqual<number>()
})

console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Alice", age: 30 }))
// true
console.log(PersonEquivalence({ name: "Alice", age: 30 }, { name: "Bob", age: 30 }))
// false
instancesmakeOrder
Source effect/Struct.ts:5151 lines
export const makeEquivalence = Equivalence.Struct