Darstellung von Polymorphismus mit Unification-fd

8

Ich möchte das Paket unification-fd verwenden, um einen einfachen Typchecker für einen Hindley-Milner zu implementieren Typ System. Dies erfordert die Darstellung von polymorphen ("forall") Typen.

Wie können diese Typen am besten dargestellt werden? Die Variablen, die von unification-fd bereitgestellt werden, d. H. Der UVar -Stück, dienen der Vereinheitlichung (Meta) -Variablen, nicht den Variablen in der Objektsprache. Einige Möglichkeiten, über die ich nachgedacht habe:

  1. Fügen Sie meinem Basis-Funktor, der Typen darstellt, einen Konstruktor für Typvariablen hinzu:

    %Vor%

    mit zipMatch vereint nur gleiche TVar s. Die Typinstanziierung ersetzt konsistent alle UTerm (TVar a) durch freeVar .

  2. (Ab) Verwenden Sie UVar s für Typvariablen, und ersetzen Sie sie beim Instanziieren durch freeVar s. Erfordert die Verfolgung von universial vs. existential UVar s, um zu wissen, welche zu ersetzen sind.

  3. Lassen Sie TVar von TyF , verwenden Sie separate UTerm (TyF tcon) IntVar für monomorphe Typen während der Typprüfung, UTerm (TyF tcon) tv für von außen sichtbare polymorphe Typen und UTerm (TyF tcon) (Either tv IntVar) während der Typprüfung für intermediate, let -gebundene Variablen.

Was wäre das Beste? Gibt es eine andere Art, an die ich nicht gedacht habe?

    
Cactus 30.04.2016, 05:01
quelle

0 Antworten