Бесформенные кодирует двойное отрицание , как это
type ¬[T] = T => Nothing
type ¬¬[T] = ¬[¬[T]]
, то есть
(T => Nothing) => Nothing
Мили объясняет
... нижний тип (тип Scala Nothing
) отображается на логическую ложь ... отрицание типа A
(я напишу его как ¬[A]
), чтобы иметь в качестве значений все, что не является экземпляр A
Nothing
также используется для представления не прекращения , то есть вычисления, которое не может привести к значению
def f[T](x: T): Nothing = f(x)
Применение этой интерпретации к (T => Nothing) => Nothing
, кажется, означает:
( T => Nothing ) => Nothing
Assuming a value of type T, then the program does not terminate, hence it never produces a value.
Правильна ли эта интуиция? Являются ли понятия лжи и не прекращения эквивалентными? Если так, то почему программа, которая не производит значение, которое не производит значение, означает, что у нас есть значение T?