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 .
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
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.
Tags und Links haskell lazy-evaluation weak-head-normal-form