Ich lese beim Schreiben einer Implementierung etwas über den Hindley-Milner-Typisierungsalgorithmus und sehe, dass Sie, solange jede Variable gebunden ist, immer entweder atomare Typen oder Typen erhalten, bei denen die Argumente den endgültigen Typ bestimmen, z. B. t1 -> t1
oder (t1 -> t2) -> (t1 -> t2)
wo t1
und t2
ist vom Typ Variablen.
Ich kann mir keine Möglichkeit vorstellen, wie Sie so etwas t1 -> t2
oder einfach so bekommen t1
, was meiner Meinung nach bedeuten würde, dass der Algorithmus kaputt ist, da es keine Möglichkeit geben würde, den tatsächlichen Typ des Ausdrucks zu bestimmen. Woher weißt du, dass du niemals einen Typ wie diesen "kaputten" bekommen wirst, solange jede Variable gebunden ist?
Ich weiß, dass der Algorithmus Typen mit Variablen liefert, aber diese werden immer aufgelöst, wenn Sie die Argumente an die Funktion übergeben, was bei einer Funktion mit Typ nicht der Fall wäre t1 -> t2
. Aus diesem Grund möchte ich wissen, wie wir sicher wissen, dass der Algorithmus niemals solche Typen liefern wird.
(Es scheint, dass Sie diese "kaputten" Typen in ML bekommen können , aber ich frage nach Lambda-Kalkül.)