Skip to content
ZOLO / TE162 Type · error

invalid validated-newtype contract or construction

Compiler diagnostic TE162: invalid validated-newtype contract or construction.


publication: internal status: draft

Uma cláusula where declara uma condição obrigatória para o valor interno. O predicado precisa ser uma lambda de um parâmetro escalar, com retorno bool, sem efeitos e com capturas cuja imutabilidade possa ser provada. Any, capturas mutáveis, aridade incorreta ou chamadas de pureza desconhecida não definem um contrato verificável.

newtype Score(int) where |value| 0 <= value <= 100
let score = Score.new(42).unwrap()

O construtor sempre retorna Result<Score, str>. Trate o erro ou propague o Result antes de usar Score. Um valor rejeitado não adquire o tipo nominal.

Este diagnóstico também impede caminhos que contornam a construção, como construção estrutural do wrapper, alteração do payload ou conversão de Any diretamente para um newtype validado. Use o construtor com um valor do tipo escalar interno e trate sua resposta:

let raw: int = 42
let checked = Score.new(raw)
match checked {
    Ok(score) => print(score.unwrap()),
    Err(message) => print(message),
}

Se a lambda usa um limite externo, ele precisa ser comprovadamente estável; escrever let sozinho não constitui essa prova quando o mesmo binding pode ser alterado. Mantenha o contrato independente de estado mutável.

Consulte Newtypes.

Any também não comprova o formato de inteiros com tamanho explícito ou f32. Para esses construtores validados, obtenha primeiro um escalar do tipo interno por uma conversão verificada. Não use um cast para o próprio newtype como atalho para a validação. Capturas externas de decimal ou bigdecimal exigem prova de um valor protegido; um binding sem reatribuição não comprova isso.

Global index

Find your way through Zolo

Try an idea

Start here

9 results

9 results

en