Типы стираются до времени выполнения


Я точно знаю, что в Haskell типы всегда стираются до времени выполнения. Что происходит в случае Агда?

Передается ли информация зависимого типа во время выполнения ?

1 5

1 ответ:

Какая среда выполнения? Есть по крайней мере четыре бэкенда: те, которые нацелены на GHC (называемый MAlonzo), UHC, Epic и JavaScript. Некоторые начальные детали можно найти в Agda wiki : вы можете прочитать, как Epic backend стирает типы там или в этой статье (Глава "3.3 стирание"). Короче говоря, Epic и UHC backends стирают все типы, которые получает полностью прикладная функция, но не выполняют полного стирания, поскольку это может изменить семантику программы (цитируется из статьи о бэкэнде UHC):

Перевод типа

Остальные термины Π, Set и Level являются имеет значение только для проверки типа. В Agda значение типа Set или Level не могут быть проверены или сопоставлены с образцом. Как Агда принуждает к этому невозможно наблюдать какое-либо значение этих типов, они не могут влияет на семантику среды выполнения. Для выполнения программы, таким образом, безопасно заменить все вхождения таких значений на единичное значение .

Один может также возникнуть соблазн полностью удалить все эти значения добрый. Это потенциально может изменить семантику переведенного текста. программа. Agda не вычисляет выражения под лямбдами; отбрасывание лямбда-абстракции, принимающие выражения типа, могут быть удалены оценка-блокирование лямбд. Частичное стирание типов возможно в хороший способ. Насыщенные функциональные приложения, например, всегда могут быть оптимизирован таким образом. Более подробное описание, Когда такие типы может быть и здраво стерто можно найти в предыдущей работе Летузея.