Skip to main content
Next (unreleased) · docs dcb1384b · core c3a5528b · built 2026-10-27 12:07 UTC

A transparent public alias omitted its nominal type dependency

Limitation​

Importing public type EmptyPacket := Packet<{}> without separately importing Packet previously reported unknown type Packet in the consuming module. Alias expansion now materializes a synthetic import for nominal dependencies from the defining module. The two-module regression module_semantics/release_matrix_row_callback/ passes without a skip after metel-core PR #1422. Written constructor lookup also requires either a resolved import identity or a name in the current module's scope: the synthetic alias dependency does not expose the original bare constructor name.

Impact​

Previously, public aliases to specialized nominal types were not self-contained across module boundaries.

Affects​

Resolution​

Alias dependency preservation was implemented in metel-core commit 5f038b189cb67c5ec40e51d16a3e11a831a4535e (PR #1422). Exit evidence for metel-core#1414 includes module_semantics/release_matrix_row_callback, module_semantics/imported_nominal_alias_definition_scope (renames, re-exports, record and ordinary generic aliases, consumer name collisions), and module_semantics/alias_rhs_constructor_not_imported (the original constructor remains unavailable).