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

    TPZ5524: Private protocol bound cannot cross a module interface

    An exported function exposes a bound on a module-local user protocol.

    Diagnostic and cause

    Link

    TPZ5524

    Family
    topaz
    Phase
    check
    Code
    TPZ5524

    Cause and conditions

    An exported function or a method signature of an exported protocol may expose built-in protocols and exported user protocols in its bounds. Resolve each bound through its defining protocol identity, including selected aliases and namespace qualification. A private protocol bound is rejected with TPZ5524. Default expressions keep their ordinary lexical environment. This visibility check concerns the public signature.

    Response

    Source evidence

    Compiler phase: check/package.

    Compiler explanation: An exported function exposes a bound on a module-local user protocol.

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

    • exported functions cannot expose module-local protocol bound ⟨value⟩ Source

    Public callable bounds may name built-in or exported user protocols. Exposing a private protocol bound is rejected with TPZ5524.

    Rulediagnostics.tpz5524.p5.rule

    Private protocol bound cannot cross a module interface

    Public callable bounds may name built-in or exported user protocols. Exposing a private protocol bound is rejected with TPZ5524.

    Source evidence

    Response

    Link

    Export the protocol when it belongs in the public contract, or keep the callable private. Import an exported protocol through the ordinary module boundary.

    Reproduction and verification

    Link

    Rejected program

    Link
    example.tpzRejected programOpen in Playground
    1. protocol Local {
    2. function show(value: Self) -> string
    3. }
    4. export function render<T: Local>(value: T) -> string { Local.show(value) }
    Expected outputNonzero exit
    No stdout.
    $ topaz check example.tpz · target product 5.21.3
    Expected result

    Expected result

    Rejection during check. Nonzero exit.

    • TPZ5524 diagnostic-tpz5524 at example.tpz:4:27
    Source evidence

    Repaired program

    Link
    example.tpzRepaired program
    1. protocol Local {
    2. function show(value: Self) -> string
    3. }
    4. function render<T: Local>(value: T) -> string { Local.show(value) }
    Expected outputexit 0
    $ topaz check example.tpz · target product 5.21.3
    Expected result

    Expected result

    Checking accepts the program. Exit code 0.

    Source evidence

    Menu

    Download