J'ai du mal à comprendre l' exists
mot-clé par rapport à Haskell type de système. Autant que je sache, il n'existe pas de mot-clé en Haskell par défaut, mais:
- Il y a des extensions qui ajoutent eux, dans des déclarations comme ces
data Accum a = exists s. MkAccum s (a -> s -> s) (s -> a)
- J'ai vu un article sur eux, et (si je me souviens bien), elle a indiqué qu'
exists
mot-clé n'est pas nécessaire pour le type de système car il peut être généralisée enforall
Mais je ne peux même pas comprendre ce qu' exists
moyens.
Quand je dis, forall a . a -> Int
, cela signifie (dans ma compréhension, l'incorrect, je suppose) "pour chaque (type) a
, il y a une fonction d'un type a -> Int
":
myF1 :: forall a . a -> Int
myF1 _ = 123
-- okay, that function (`a -> Int`) does exist for any `a`
-- because we have just defined it
Quand je dis exists a . a -> Int
, que peut-il dire? "Il y a au moins un type a
pour lesquels il existe une fonction d'un type a -> Int
"? Pourquoi on écrire une telle déclaration? Quel est le but? La sémantique? Comportement du compilateur?
myF2 :: exists a . a -> Int
myF2 _ = 123
-- okay, there is at least one type `a` for which there is such function
-- because, in fact, we have just defined it for any type
-- and there is at least one type...
-- so these two lines are equivalent to the two lines above
Veuillez noter qu'il n'est pas destiné à être un véritable code qui permet de compiler, juste un exemple de ce que je suis en imaginant puis j'ai entendu parler de ces quantificateurs.
J'ai essayé de lire les docs, mais mes faibles compétences en anglais et pauvres compétences en Mathématiques obtenir de la manière, je suppose.
Ça semble être un gros malentendu... Merci de m'aider à l'obtenir droite
P. S. je ne suis pas exactement un débutant total en Haskell (peut-être comme une seconde niveleuse), mais mes calculs de fondations de ces choses manquent, donc si vous connaissez une bonne (peut-être compliqué, mais bon et compréhensible sans Doctorat) livre, le papier ou sur le guide, s'il vous plaît me dire à ce sujet