<N extends Newtype.Any>(
equivalence: Equivalence.Equivalence<Newtype.Carrier<N>>
): Equivalence.Equivalence<N>Lifts an Equivalence for the carrier type into an Equivalence for the
newtype.
When to use
Use when you need equality for newtype-wrapped values to behave like equality for the wrapped carrier value, without manually unwrapping.
Details
The returned equivalence delegates to the provided carrier equivalence and has zero runtime cost beyond the underlying equivalence check.
Example (Comparing newtypes)
import { Equivalence, Newtype } from "effect"
interface Label extends Newtype.Newtype<"Label", string> {}
const eq = Newtype.makeEquivalence<Label>(Equivalence.String)
const iso = Newtype.makeIso<Label>()
eq(iso.set("a"), iso.set("a")) // true
eq(iso.set("a"), iso.set("b")) // falseexport const const makeEquivalence: <
N extends Newtype.Any
>(
equivalence: Equivalence.Equivalence<
Newtype.Carrier<N>
>
) => Equivalence.Equivalence<N>
Lifts an Equivalence for the carrier type into an Equivalence for the
newtype.
When to use
Use when you need equality for newtype-wrapped values to behave like
equality for the wrapped carrier value, without manually unwrapping.
Details
The returned equivalence delegates to the provided carrier equivalence and
has zero runtime cost beyond the underlying equivalence check.
Example (Comparing newtypes)
import { Equivalence, Newtype } from "effect"
interface Label extends Newtype.Newtype<"Label", string> {}
const eq = Newtype.makeEquivalence<Label>(Equivalence.String)
const iso = Newtype.makeIso<Label>()
eq(iso.set("a"), iso.set("a")) // true
eq(iso.set("a"), iso.set("b")) // false
makeEquivalence: <function (type parameter) N in <N extends Newtype.Any>(equivalence: Equivalence.Equivalence<Newtype.Carrier<N>>): Equivalence.Equivalence<N>N extends Newtype.type Newtype<in out Key extends string, out Carrier>.Any = Newtype<any, unknown>A type that matches any Newtype, useful as a generic constraint:
<N extends Newtype.Any>.
When to use
Use as a generic constraint when a type parameter can be any Newtype.
Any>(
equivalence: Equivalence.Equivalence<
Newtype.Carrier<N>
>
equivalence: import EquivalenceEquivalence.type Equivalence.Equivalence = /*unresolved*/ anyEquivalence<Newtype.type Newtype<in out Key extends string, out Carrier>.Carrier<N extends Newtype.Any> = N extends Newtype<infer _Key extends string, infer Carrier> ? Carrier : neverExtracts the carrier (underlying) type from a newtype.
When to use
Use when you need to refer to the wrapped type in generic utilities.
Carrier<function (type parameter) N in <N extends Newtype.Any>(equivalence: Equivalence.Equivalence<Newtype.Carrier<N>>): Equivalence.Equivalence<N>N>>
) => import EquivalenceEquivalence.type Equivalence.Equivalence = /*unresolved*/ anyEquivalence<function (type parameter) N in <N extends Newtype.Any>(equivalence: Equivalence.Equivalence<Newtype.Carrier<N>>): Equivalence.Equivalence<N>N> = import castcast