Data.Typeable
- это кодировка хорошо известного подхода (см., Например, Harper) к реализации отложенной (динамической) проверки типов в статически типизированном языке - с использованием универсального типа.
Такой тип переносит код, для которого проверка типов не будет успешной до более поздней фазы.Вместо того, чтобы отклонять программу как неправильно напечатанную, компилятор передает ее для проверки во время выполнения.
Стиль, созданный в Abadi et al. И разработанный для Haskell Чейни и Хинцем в качестве оболочки для представления всех динамических типов, при этом класс Typeable
появился как часть работы SYB SPJ и Lammel.
Ссылка
- Мартин Абади, Лука Карделли, Бенджамин Пирс и Гордон Плоткин, " Динамическая печать на языке со статической типизацией", ACM Транзакции на языках программирования и системах (TOPLAS), 1991.
- Джеймс Чейни и Ральф Хинце," Облегченная реализация обобщений и динамики", Haskell '02: Материалы поСеминар ACM SIGPLAN 2002 г. на Хаскелле, 2002 г.
- Ламмель, Ральф и Джонс, Саймон Пейтон, " Соскребите свой шаблон: практический шаблон проектирования для общего программирования , TLDI '03: Материалы по2003 Международный семинар ACM SIGPLAN по типам в проектировании и реализации языков, 2003
- Harper, 2011, Практические основы для языков программирования.
Даже в учебниках: динамические типы (с типизируемыми представлениями) являются статически типизированными языками только одного типа, Harper ch 20:
20.4 Unyyped Means UniТипизированный
Нетипизированное λ-исчисление может быть точно встроено в типизированный язык с рекурсивными типами.Это означает, что каждый нетипизированный λ-термин имеет представление в виде типизированного выражения таким образом, что выполнение представления λ-члена соответствует выполнению самого термина.Это вложение является не вопросом написания интерпретатора для λ-исчисления в ℒ {+ × ⇀µ} (что мы наверняка могли бы сделать), а скорее прямым представлением нетипизированных λ-членов в виде типизированных выраженийна языке с рекурсивными типами.
Ключевое наблюдение заключается в том, что нетипизированное λ-исчисление действительно является унифицированным λ-исчислением!Это не отсутствие типов, которые дают ему силу, а скорее то, что он имеет только один тип, а именно рекурсивный тип
D = µt.t →т.