Je commence à comprendre comment le forall
mot-clé est utilisé dans les soi-disant "types existentiels" comme ceci:
data ShowBox = forall s. Show s => SB s
Ce n'est qu'un sous-ensemble, cependant, de la façon dont il forall
est utilisé et je ne peux tout simplement pas me concentrer sur son utilisation dans des choses comme ceci:
runST :: forall a. (forall s. ST s a) -> a
Ou en expliquant pourquoi ceux-ci sont différents:
foo :: (forall a. a -> a) -> (Char, Bool)
bar :: forall a. ((a -> a) -> (Char, Bool))
Ou tout RankNTypes
ça ...
J'ai tendance à préférer un anglais clair et sans jargon plutôt que les types de langue qui sont normaux dans les environnements académiques. La plupart des explications que j'essaie de lire à ce sujet (celles que je peux trouver via les moteurs de recherche) ont ces problèmes:
- Ils sont incomplets. Ils expliquent une partie de l'utilisation de ce mot-clé (comme "types existentiels") qui me fait plaisir jusqu'à ce que je lise le code qui l'utilise d'une manière complètement différente (comme
runST
,foo
etbar
au - dessus). - Ils sont densément chargés d'hypothèses selon lesquelles j'ai lu la dernière en date dans n'importe quelle branche des mathématiques discrètes, de la théorie des catégories ou de l'algèbre abstraite populaire cette semaine. (Si je ne lis jamais les mots « consulter le papier tout pour les détails de la mise en œuvre » à nouveau, il sera trop tôt.)
- Ils sont écrits d'une manière qui transforme souvent même des concepts simples en grammaire et sémantique tortueusement tordues et fracturées.
Alors...
Passons à la vraie question. Quelqu'un peut-il expliquer complètement le forall
mot - clé dans un anglais clair et simple (ou, s'il existe quelque part, indiquer une explication aussi claire que j'ai ratée) qui ne suppose pas que je suis un mathématicien imprégné de jargon?
Modifié pour ajouter:
Il y avait deux réponses remarquables parmi celles de meilleure qualité ci-dessous, mais malheureusement, je ne peux en choisir qu'une comme meilleure. La réponse de Norman était détaillée et utile, expliquant les choses d'une manière qui montrait certains des fondements théoriques forall
et en même temps me montrait certaines de ses implications pratiques. la réponse de yairchua couvert un domaine que personne d'autre n'a mentionné (variables de type de portée) et a illustré tous les concepts avec du code et une session GHCi. S'il était possible de sélectionner les deux au mieux, je le ferais. Malheureusement, je ne peux pas et, après avoir examiné attentivement les deux réponses, j'ai décidé que le yairchu borde légèrement celui de Norman en raison du code illustratif et des explications jointes. C'est un peu injuste, cependant, car j'avais vraiment besoin des deux réponses pour comprendre cela au point que forall
cela ne me laisse pas un faible sentiment de crainte quand je le vois dans une signature de type.