Фонды и GADT: Когда проверка типа разрешима?

Я читал исследовательскую статью о Haskell и о том, как реализуется HList, и задаюсь вопросом, когда описываются описанные методы и не разрешимы для проверки типа. Кроме того, поскольку вы можете делать подобные вещи с помощью GADT, мне было интересно, разрешена ли проверка типов GADT.

Я бы предпочел цитаты, если у вас есть их, чтобы я мог читать/понимать объяснения.

Спасибо!

Ответ 1

Я считаю, что проверка типа GADT всегда разрешима; это вывод, который неразрешим, поскольку требует унификации более высокого порядка. Но проверка типа GADT - это ограниченная форма проверочных проверок, которую вы видите, например. Coq, где конструкторы создают доказательство. Например, классический пример вложения лямбда-исчисления в GADT имеет конструктор для каждого правила сокращения, поэтому, если вы хотите найти нормальную форму термина, вы должны сказать, какие конструкторы вам помогут. Проблема с остановкой была перенесена в руки пользователя: -)

Ответ 2

Возможно, вы уже это видели, но в исследовании Microsoft есть сборник статей по этой проблеме: Тип проверки документов. Первый описывает разрешимый алгоритм, фактически используемый в компиляторе Glasgow Haskell.