Unify
Defines Effect's type-level unification protocol.
Unification collapses unions of protocol-enabled values into their public data types. It is mostly for maintainers of Effect data types and advanced library authors; application code usually benefits from it through APIs such as Effect, Option, Result, Stream, Layer, and Match. This module exports the protocol symbols, the Unify type that performs normalization, and unify, an identity function that changes only the inferred type.
Models
Symbols
ignoreSymbol
Defines the unique symbol used to specify types that should be ignored during unification.
When to use
Use to hide helper protocol entries from Unify when they should not contribute to the widened type.
Details
This symbol is a type-level protocol key. It lists protocol entries that unification should ignore when computing the widened type.
See
unifySymbolfor defining the protocol entries being filtered
Signature
declare const ignoreSymbol: unique symbol;ignoreSymbol type
The type of the ignoreSymbol.
When to use
Use to reference the ignored-property key in type-level protocol definitions.
Details
This type represents the unique symbol used for marking types that should be ignored during unification operations. It's used in type-level operations to exclude specific types from the unification process.
Signature
type ignoreSymbol = typeof ignoreSymbol;typeSymbol
Defines the unique symbol used to identify the type information for unification.
When to use
Use when you need a type-level protocol key that exposes the source type read by Unify from a protocol-enabled data type.
Details
This symbol is a type-level protocol key. It stores the source type that unification reads when widening protocol-enabled values.
See
unifySymbolfor defining how protocol entries widen
Signature
declare const typeSymbol: unique symbol;typeSymbol type
The type of the typeSymbol.
When to use
Use to reference the type information property key in type-level protocol definitions.
Details
This type represents the unique symbol used for storing type information in types that support unification. It's used in type-level operations to access and manipulate type information.
Signature
type typeSymbol = typeof typeSymbol;unifySymbol
Defines the unique symbol used to identify unification behavior in Effect types.
When to use
Use to define the widened type produced by the Unify protocol for a custom protocol-enabled data type.
Details
This symbol is a type-level protocol key. It describes how a protocol-enabled type widens during unification and has no runtime behavior.
See
typeSymbolfor storing the source type information used during unificationignoreSymbolfor excluding protocol entries from unification
Signature
declare const unifySymbol: unique symbol;unifySymbol type
The type of the unifySymbol.
When to use
Use to reference the unification behavior property key in type-level protocol definitions.
Details
This type represents the unique symbol used for identifying unification behavior in Effect types. It's typically used in type-level operations to enable automatic type unification.
Signature
type unifySymbol = typeof unifySymbol;Utility Types
Applies Unify to a value or function return type at compile time.
When to use
Use to keep a value or function unchanged at runtime while normalizing its inferred type with Effect's unification protocol.
Details
This is an identity function at runtime. For functions, the returned function has the same runtime behavior while its return type is normalized with the Effect unification protocol.
See
Unifyfor the type-level normalization applied by this helper
Signature
declare const unify: {
<
Args extends Array<any>,
Args2 extends Array<any>,
Args3 extends Array<any>,
Args4 extends Array<any>,
Args5 extends Array<any>,
T,
>(
x: (
...args: Args
) => (...args: Args2) => (...args: Args3) => (...args: Args4) => (...args: Args5) => T,
): (
...args: Args
) => (...args: Args2) => (...args: Args3) => (...args: Args4) => (...args: Args5) => Unify<T>;
<
Args extends Array<any>,
Args2 extends Array<any>,
Args3 extends Array<any>,
Args4 extends Array<any>,
T,
>(
x: (...args: Args) => (...args: Args2) => (...args: Args3) => (...args: Args4) => T,
): (...args: Args) => (...args: Args2) => (...args: Args3) => (...args: Args4) => Unify<T>;
<Args extends Array<any>, Args2 extends Array<any>, Args3 extends Array<any>, T>(
x: (...args: Args) => (...args: Args2) => (...args: Args3) => T,
): (...args: Args) => (...args: Args2) => (...args: Args3) => Unify<T>;
<Args extends Array<any>, Args2 extends Array<any>, T>(
x: (...args: Args) => (...args: Args2) => T,
): (...args: Args) => (...args: Args2) => Unify<T>;
<Args extends Array<any>, T>(x: (...args: Args) => T): (...args: Args) => Unify<T>;
<T>(x: T): Unify<T>;
};
Unifies types that implement the unification protocol.
When to use
Use to normalize unions of types that expose Effect's unification protocol.
Details
This type performs automatic type unification for types that contain the unification symbols (
unifySymbol,typeSymbol,ignoreSymbol). It's primarily used internally by the Effect type system to handle complex type unions and provide better type inference.See
unifyfor applying this normalization to a value or function