Skip to content
Topaz6.0 · Before release
Download

Search documentation

Specification 6.0 · Not released · Tested product 5.21.3

Use arrow keys to choose a result. Press Enter to open.

Type an API name, diagnostic number, rule, or project topic.

    Diagnostics

    TPZ3014: Private type in exported surface

    An exported declaration exposes a private nominal type after transparent aliases are expanded.

    Diagnostic and cause

    Link

    Private type in exported surface

    Family
    topaz
    Phase
    resolve
    Code
    TPZ3014

    Cause and conditions

    An exported declaration produces TPZ3014 when its resolved type exposes a private nominal type after transparent alias expansion. Annotated and inferred types follow the same rule.

    Response

    Export the nominal type when it belongs in the public API, or return a value with an accessible type.

    Source evidence

    The compiler facts describe the earlier source visibility check. The resolved public type contract also covers inferred types and expands transparent aliases before checking nominal visibility.

    Compiler phase: resolve.

    Compiler explanation: An exported signature mentions a type alias that the module does not export.

    Message templates. The marker ⟨value⟩ stands for text computed for the reported program.

    • ⟨value⟩ is a module-private type and may not appear in an exported public surface; export the type or use an inline structural type Source

    An exported declaration exposes a module-private nominal type in its resolved type. The same rule covers annotated and inferred types after transparent alias expansion. The example exposes the private Count record in a return annotation.

    Rulediagnostics.tpz3014.rule

    Trigger and repair

    An exported declaration produces TPZ3014 when its resolved type exposes a private nominal type after transparent alias expansion. Annotated and inferred types follow the same rule.

    Source evidence

    Response

    Link

    Export the nominal type when it belongs in the public API, or return a value with an accessible type.

    Reproduction and verification

    Link

    Rejected program

    Link
    example.tpzRejected programOpen in Playground
    1. import lib
    Expected outputNonzero exit
    No stdout.
    $ topaz check example.tpz --format json · target product 5.21.3
    lib.tpzRejected programOpen in Playground
    1. record Count { value: int }
    2. export function count() -> Count { Count { value: 1 } }
    Expected result

    Expected result

    Rejection during resolve. Nonzero exit.

    • TPZ3014 diagnostic-tpz3014 at lib.tpz:2:28

    The expected diagnostic, cause, source location, and accompanying diagnostics are specified below. The verification status records whether this program has been run.

    Source evidence

    Corrected program

    Link
    example.tpzCorrected programOpen in Playground
    1. import lib
    Expected outputexit 0
    No stdout.
    $ topaz check example.tpz --format json · target product 5.21.3
    lib.tpzCorrected programOpen in Playground
    1. export record Count { value: int }
    2. export function count() -> Count { Count { value: 1 } }
    Expected result

    Expected result

    Checking accepts the program. Exit code 0.

    This program applies the repair described above. The verification status records whether it has been run.

    Source evidence

    Menu

    Download