Verständnis einer komplizierten Typ-Signatur

8

Ich brauche Hilfe beim Verständnis dieser Typsignatur, die aus dem Thrist-Paket stammt.

%Vor%

Ich bin verwirrt über mehrere Dinge.

Zuerst was sind die + & gt; und ~ & gt; Symbole? Wo sind sie dokumentiert und wie heißen sie?

Aber meine Verwirrung hört dort auf. Ich erkenne, dass die Quantifizierung das Threading von Typen des Thrist beschreibt, aber ich bin mir nicht sicher, ob es eine Beziehung beschreibt, die für das erste Argument oder die ganze Funktion gilt oder wer weiß ...

In anderen Fällen, in denen ich existenzielle Quantifizierung gesehen habe, endet der Ausdruck mit einer Periode, aber hier endet er mit - & gt; ist das signifikant?

    
Jonathan Fischoff 21.12.2010, 06:18
quelle

1 Antwort

8
  

Zuerst was sind die + & gt; und ~ & gt; Symbole? Wo sind sie dokumentiert und wie heißen sie?

Sie sind Infix-Bezeichner, genau wie wenn Sie sie als Namen einer Funktion verwendet hätten. Aus dem gleichen Grund entsprechen sie den Kleinbuchstaben Bezeichnern (im Gegensatz zu Operatoren, die mit : beginnen, was alphanumerischen Großbuchstaben entspricht). In einer Typ-Signatur sind sie einfach type Variablen . Mit anderen Worten, es entspricht dem:

%Vor%
  

Aber meine Verwirrung hört dort auf. Ich erkenne, dass die Quantifizierung das Threading von Typen des Thrist beschreibt, aber ich bin mir nicht sicher, ob es eine Beziehung beschreibt, die für das erste Argument oder die ganze Funktion gilt oder wer weiß ...

Explizite Quantifizierer sind nur innerhalb umschließender Klammern oder bis zum Ende des Ausdrucks beschränkt. In diesem Fall beschreiben sie nur das erste Argument, weil die eingeführten Typvariablen nur für dieses Argument gelten.

In diesem Fall bedeutet es nur, dass die als erstes Argument angegebene Funktion in diesen Typen vollständig polymorph sein muss. Als Beispiel könnte eine Funktion, deren Typ-Signatur mit (a -> a) -> ... beginnt, als erstes Argument not angegeben werden, wodurch a mit Bool vereinheitlicht wird. Wenn dagegen die Typensignatur mit (forall a. a -> a) -> ... gestartet wird, würde eine Funktion benötigt, die für alle möglichen Typen a funktioniert, wobei die einzige solche Funktion id ist.

    
C. A. McCann 21.12.2010, 06:25
quelle

Tags und Links