Функция absurd
в Data.Void
имеет следующую подпись, где Void
- логически необитаемый тип, экспортируемый этим пакетом:
-- | Since 'Void' values logically don't exist, this witnesses the logical
-- reasoning tool of \"ex falso quodlibet\".
absurd :: Void -> a
Я достаточно разбираюсь в логике, чтобы получить замечание по документации, которое соответствует, в соответствии с утверждением типами предложений, действительной формуле ⊥ → a
.
То, о чем я озадачиваюсь и интересуюсь: в каких проблемах с программированием эта функция полезна? Я думаю, что, возможно, это полезно в некоторых случаях в качестве безопасного типа для исчерпывающей обработки случаев "не может случиться", но я не знаю достаточно о практических занятиях Карри-Говарда, чтобы сказать, является ли эта идея на правый трек.
EDIT: примеры, желательно, в Haskell, но если кто-то хочет использовать язык с навязчивым языком, я не собираюсь жаловаться...