Je travaille sur Écrivez-vous un schéma en 48 heures (je suis jusqu'à environ 85 heures) et je suis arrivé à la partie sur l' ajout de variables et d'affectations . Il y a un grand saut conceptuel dans ce chapitre, et j'aurais aimé que cela ait été fait en deux étapes avec une bonne refactorisation entre les deux plutôt que de sauter directement à la solution finale. En tous cas…
J'ai été perdu avec un certain nombre de différentes classes qui semblent servir le même but: State
, ST
, IORef
et MVar
. Les trois premiers sont mentionnés dans le texte, tandis que le dernier semble être la réponse préférée à de nombreuses questions StackOverflow sur les trois premières. Ils semblent tous porter un état entre des invocations consécutives.
Quels sont chacun de ces éléments et en quoi diffèrent-ils les uns des autres?
En particulier, ces phrases n'ont pas de sens:
Au lieu de cela, nous utilisons une fonctionnalité appelée threads d'état , permettant à Haskell de gérer l'état d'agrégation pour nous. Cela nous permet de traiter les variables mutables comme nous le ferions dans n'importe quel autre langage de programmation, en utilisant des fonctions pour obtenir ou définir des variables.
et
Le module IORef vous permet d'utiliser des variables avec état dans la monade IO .
Tout cela rend la ligne type ENV = IORef [(String, IORef LispVal)]
confuse - pourquoi la seconde IORef
? Qu'est-ce qui va casser si j'écris à la type ENV = State [(String, LispVal)]
place?