Представляющий полиморфизм с унификацией-фд

Я хотел бы использовать unification-fd пакет для реализации простой проверки типов для системы типов Хиндли-Милнера. Это требует представления полиморфных ("forall") типов.

Каков наилучший способ представления этих типов? Переменные, предоставленные unification-fd то есть UVar вещи, для унификации (мета) переменных, а не для переменных в объектном языке. Некоторые возможности, которые я обдумал:

  1. Добавить конструктор для переменных типа в мой базовый функтор, представляющий типы:

    data TyF tcon tv a
        = TCon tcon [a]
        | TVar tv
    

    с zipMatch только объединяющий равный TVar s. Тип экземпляра последовательно заменяет каждый UTerm (TVar a) с freeVar,

  2. (Злоупотребление UVar s для переменных типа, и замените их freeVar S при создании экземпляра. Требуется отслеживание универсального и экзистенциального UVar s знать, какие из них заменить.

  3. Покидать TVar снаружи TyF, используйте отдельный UTerm (TyF tcon) IntVar для мономорфных типов при проверке типов, UTerm (TyF tcon) tv для полиморфных типов, видимых снаружи, и UTerm (TyF tcon) (Either tv IntVar) во время проверки типов для промежуточного звена, let переменные

Что будет лучше? Есть ли какой-то другой способ, о котором я не думал?

0 ответов

Другие вопросы по тегам