Je commence à comprendre comment l' forall
mot-clé est utilisé dans les soi-disant "existentielle types", comme ceci:
data ShowBox = forall s. Show s => SB s
Ce n'est qu'un sous-ensemble, cependant, de l' forall
est utilisé et j'ai simplement ne peut pas envelopper mon esprit autour de son utilisation dans des choses comme ça:
runST :: forall a. (forall s. ST s a) -> a
Ou d'expliquer pourquoi elles sont différentes:
foo :: (forall a. a -> a) -> (Char,Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Ou de l'ensemble de l' RankNTypes
trucs...
J'ai tendance à préférer clair, sans jargon anglais plutôt que le genre de langage qui sont normales dans les milieux universitaires. La plupart des explications que je tente de lire sur ce (ceux que je peux trouver par les moteurs de recherche) ont ces problèmes:
- Ils sont incomplètes. Ils expliquent une partie de l'utilisation de ce mot-clé (comme "existentielle types") qui me fait me sentir heureux jusqu'à ce que j'ai lu le code qui l'utilise d'une manière complètement différente (comme
runST
,foo
etbar
ci-dessus). - Ils sont très denses avec des hypothèses que j'ai lu le dernier quelle que soit la branche des mathématiques discrètes, la catégorie de la théorie ou de l'algèbre abstraite est populaire cette semaine. (Si je n'ai jamais lu les mots "consulter le document quel que soit pour des détails de mise en œuvre" de nouveau, il sera trop tôt.)
- Ils sont écrits dans des voies qui se révèlent souvent même de simples concepts en tortuously tordu et brisé la grammaire et de la sémantique.
Alors...
Sur la question réelle. Quelqu'un peut-il expliquer totalement l' forall
mot-clé en clair anglais (ou, si elle existe quelque part, tel une explication claire qui je l'ai raté) qui ne suppose que je suis un mathématicien ancré dans le jargon?
Edité pour ajouter:
Il y a deux stand-out réponses de la plus grande qualité de celles ci-dessous, mais malheureusement je ne peux pas en choisir un comme le meilleur. Norman réponse a été détaillées et utiles, de façon d'expliquer les choses d'une façon qui ont montré que certains des fondements théoriques de l' forall
et en même temps me montrant des implications pratiques. yairchu réponse couvrait une superficie personne d'autre ne l'a mentionné (dans l'étendue des variables de type) et illustré de tous les concepts avec un code et un GHCi session. S'il était possible de sélectionner à la fois en tant que meilleur, je le ferais. Malheureusement je ne peux pas et, après avoir examiné les deux réponses de près, j'ai décidé que yairchu est légèrement Norman est à cause de l'illustration de code et explication jointe. C'est un peu injuste, cependant, parce que vraiment j'ai besoin de réponses pour comprendre cela au point qu' forall
ne me laisse pas avec un faible sentiment d'effroi quand je la vois dans un type de signature.