Skip to content
ZOLO / TE163 Type · error

invalid nominal unit declaration, literal or operation

Compiler diagnostic TE163: invalid nominal unit declaration, literal or operation.


publication: internal status: draft

Uma declaração de unidade, seu literal ou sua operação não apresenta um contrato numérico nominal válido. O diagnóstico aponta o sufixo, a magnitude ou o operador que precisa ser corrigido.

Declare um sufixo não vazio sobre um newtype numérico:

@unit("kg") newtype Mass(decimal)
let parcel = 2.5kg

O sufixo deve começar com uma letra ASCII; os demais caracteres podem ser letras ASCII, dígitos e underscore. Um underscore inicial seria absorvido como separador numérico. e ou E seguido de dígito também é reservado pela notação de expoentes. Os sufixos embutidos de números e durações são reservados. Uma anotação deve conter uma única string, e o construtor real deve aceitar o escalar interno.

Um sufixo desconhecido exige a declaração ou seu import. Quando houver dois tipos visíveis com o mesmo sufixo, use nomes de unidade distintos; aliases da mesma declaração não criam uma segunda identidade. Uma sugestão de grafia altera apenas o sufixo e preserva o número.

A magnitude precisa caber no tipo interno. Use um tipo adequado se precisar de frações ou de uma faixa maior. Um literal com where também precisa respeitar o predicado, mantendo a construção verificada de TE162.

Somar, subtrair e comparar exige a mesma unidade. Escalas usam o escalar interno, e conversões entre unidades são explícitas:

@unit("g") newtype Grams(decimal)
let grams = 500g
let kilograms = Mass.new(grams.unwrap() / 1000d)

Multiplicar duas unidades ou combinar donos diferentes exige uma implementação explícita. Não há conversão implícita pelo nome do sufixo. Consulte Newtypes.

Global index

Find your way through Zolo

Try an idea

Start here

9 results

9 results

en