Представляющий полиморфизм с унификацией-фд
Я хотел бы использовать unification-fd
пакет для реализации простой проверки типов для системы типов Хиндли-Милнера. Это требует представления полиморфных ("forall") типов.
Каков наилучший способ представления этих типов? Переменные, предоставленные unification-fd
то есть UVar
вещи, для унификации (мета) переменных, а не для переменных в объектном языке. Некоторые возможности, которые я обдумал:
Добавить конструктор для переменных типа в мой базовый функтор, представляющий типы:
data TyF tcon tv a = TCon tcon [a] | TVar tv
с
zipMatch
только объединяющий равныйTVar
s. Тип экземпляра последовательно заменяет каждыйUTerm (TVar a)
сfreeVar
,(Злоупотребление
UVar
s для переменных типа, и замените ихfreeVar
S при создании экземпляра. Требуется отслеживание универсального и экзистенциальногоUVar
s знать, какие из них заменить.Покидать
TVar
снаружиTyF
, используйте отдельныйUTerm (TyF tcon) IntVar
для мономорфных типов при проверке типов,UTerm (TyF tcon) tv
для полиморфных типов, видимых снаружи, иUTerm (TyF tcon) (Either tv IntVar)
во время проверки типов для промежуточного звена,let
переменные
Что будет лучше? Есть ли какой-то другой способ, о котором я не думал?