Diagnostic and cause
СсылкаValue is not comparable or keyable
- Семейство
- topaz
- Этап
- check
- Код
TPZ5007
Причина и условия
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
Связанное правило · Function values cannot be compared for equality →Действия
Choose values with the required equality or ordering behavior. For a user-defined type, supply the supported protocol implementation or compare a suitable field.
Compiler phase: check/runtime.
Compiler explanation: The operation requires equality/order/key semantics that this type does not provide.
Message templates. The marker ⟨value⟩ stands for text computed for the reported program.
⟨value⟩is not ordered comparable, so.cannot sort it Source⟨value⟩() - the
⟨value⟩key type⟨value⟩is not ordered comparable, so.cannot sort it Source⟨value⟩() ⟨value⟩is not comparable, sotest.cannot compare it Source⟨value⟩ ⟨value⟩and⟨value⟩are not ordered comparable Source⟨value⟩and⟨value⟩are not comparable values Source⟨value⟩and⟨value⟩are never equal Source- ⟨value⟩ is not a valid Map/Set key (⟨value⟩ keys are not supported yet) Source
Observed for the candidate in Topaz 5.21.3. Execution
- error[TPZ5007]:
() -and> int () -are not comparable values> int
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
Function values cannot be compared for equality
Equality requires comparable operand types. Function values are not comparable, so comparing two functions with == is rejected with TPZ5007. Comparing their int results is accepted.
Response
СсылкаChoose values with the required equality or ordering behavior. For a user-defined type, supply the supported protocol implementation or compare a suitable field.
Reproduction and verification
СсылкаRejected program
Ссылкаfunction first() -> int { 1 }function second() -> int { 2 }let same = first == second
Нет стандартного вывода.Ожидаемый результат
Ожидаемый результат
Этап отклонения check. Ненулевой код завершения.
diagnostic-tpz5007 at
example.tpz:3:12
Repaired program
Ссылкаfunction first() -> int { 1 }function second() -> int { 2 }let same = first() == second()
Ожидаемый результат
Ожидаемый результат
Проверка принимает программу. Код завершения 0.