Ausdruckauswertung in Haskell: Wenn der Typ eines Unterausdrucks korrigiert wird, wird der übergeordnete Ausdruck in unterschiedlichem Maße ausgewertet

8

Ich kann folgendes Verhalten nicht erklären:

%Vor%

Wenn ich nun einen Typ für x vorstelle:

%Vor%

Warum zwingt die Spezifikation des x-Typs y zu seiner schwachen Kopfnormalform (WHNF) ?

Ich habe dieses Verhalten beim Lesen von Simon Marlows paralleler und gleichzeitiger Programmierung in Haskell zufällig entdeckt .

    
unshul 03.09.2015, 05:27
quelle

1 Antwort

10

Hier ist eine informierte Schätzung. In Ihrem ersten Beispiel

%Vor%

Also

%Vor%

Im GHC-Kern ist diese y eine Funktion , die ein Num Wörterbuch verwendet und ein Paar ergibt. Wenn Sie evaluate y , dann würde GHCi es für Sie voreinstellen und das Integer Wörterbuch anwenden. Aber von dem, was Sie gezeigt haben, scheint es wahrscheinlich, dass dies nicht mit sprint geschieht. Du hast also noch kein Paar; Sie haben eine Funktion, die eine erzeugt.

Wenn Sie sich auf Int spezialisieren, wird das Wörterbuch auf x angewendet, sodass Sie

erhalten %Vor%

Statt einer Funktion aus einem Wörterbuch ist x jetzt ein Thunk. Jetzt muss kein Wörterbuch mehr verwendet werden, um y zu bewerten! y ist nur die Anwendung des Paarkonstruktors auf zwei Zeiger auf den x thunk. Das Anwenden eines Konstruktors zählt nicht als Berechnung, also wird es niemals träge verzögert.

    
dfeuer 03.09.2015, 05:40
quelle