Ich fange an zu verstehen, wie das forall
Schlüsselwort in sogenannten "existentiellen Typen" wie diesem verwendet wird:
data ShowBox = forall s. Show s => SB s
Dies ist jedoch nur eine Teilmenge der forall
Verwendung, und ich kann mich einfach nicht auf die Verwendung in solchen Dingen konzentrieren:
runST :: forall a. (forall s. ST s a) -> a
Oder erklären, warum diese unterschiedlich sind:
foo :: (forall a. a -> a) -> (Char, Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Oder das ganze RankNTypes
Zeug ...
Ich bevorzuge klares, jargonfreies Englisch gegenüber den im akademischen Umfeld normalen Sprachen. Die meisten Erklärungen, die ich dazu zu lesen versuche (diejenigen, die ich über Suchmaschinen finden kann), haben folgende Probleme:
- Sie sind unvollständig. Sie erklären , einen Teil der Verwendung dieses Schlüsselwort (wie „existentielle Typen“) , die mich glücklich fühlen , bis ich Code gelesen , dass Verwendungen es in eine ganz andere Art und Weise (wie
runST
,foo
undbar
oben). - Sie sind vollgepackt mit Annahmen, dass ich die neuesten Informationen zu den Bereichen diskreter Mathematik, Kategorietheorie oder abstrakter Algebra gelesen habe, die diese Woche beliebt sind. (Wenn ich nie die Worte lesen „konsultieren Sie das Papier , was für Einzelheiten der Umsetzung“ wieder, wird es zu früh.)
- Sie sind so geschrieben, dass selbst einfache Konzepte häufig in gewundene und gebrochene Grammatik und Semantik umgewandelt werden.
So...
Weiter zur eigentlichen Frage. Kann jemand das forall
Schlüsselwort vollständig in klarem, einfachem Englisch erklären (oder, falls es irgendwo existiert, auf eine so klare Erklärung verweisen, die ich verpasst habe), die nicht davon ausgeht, dass ich ein im Fachjargon versierter Mathematiker bin?
Bearbeitet, um hinzuzufügen:
Es gab zwei herausragende Antworten von den höherwertigen unten, aber leider kann ich nur eine als die beste auswählen. Normans Antwort war detailliert und nützlich und erklärte die Dinge auf eine Weise, die einige der theoretischen Grundlagen forall
zeigte und mir gleichzeitig einige der praktischen Implikationen davon zeigte. Yairchus Antwortdeckte einen Bereich ab, den sonst niemand erwähnte (Variablen vom Typ Scoped) und illustrierte alle Konzepte mit Code und einer GHCi-Sitzung. Wäre es möglich, beide als am besten auszuwählen, würde ich. Leider kann ich nicht und nachdem ich beide Antworten genau durchgesehen habe, habe ich beschlossen, dass Yairchus aufgrund des illustrativen Codes und der beigefügten Erklärung die von Norman leicht übertrifft. Dies ist jedoch etwas unfair, da ich wirklich beide Antworten brauchte, um dies bis zu einem Punkt zu verstehen, an dem forall
ich kein leichtes Gefühl der Angst habe, wenn ich es in einer Typensignatur sehe.