Diagnostic and cause
СсылкаTPZ5524
- Семейство
- topaz
- Этап
- check
- Код
TPZ5524
Причина и условия
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.
Связанное правило · Bounds exposed by public callables →Действия
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.
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.
Response
Ссылка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
СсылкаRejected program
Ссылкаprotocol Local {function show(value: Self) -> string}export function render<T: Local>(value: T) -> string { Local.show(value) }
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
diagnostic-tpz5524 at
example.tpz:4:27
Repaired program
Ссылкаprotocol Local {function show(value: Self) -> string}function render<T: Local>(value: T) -> string { Local.show(value) }
Ожидаемый результат
Ожидаемый результат
Проверка принимает программу. Код завершения 0.