Je suis en train de travailler à travers Écrire Vous-même un Régime de 48 Heures (j'en suis à environ 85hrs) et j'ai reçu de la part de l'Ajout de Variables et les Affectations. Il y a un grand saut conceptuel dans ce chapitre, et je voudrais qu'il avait été fait en deux étapes avec une bonne refactoring entre les deux, plutôt que de sauter à droite à la solution finale. De toute façon...
J'ai perdu un certain nombre de catégories différentes qui semblent servir le même but: l'Etat, ST, IORef, et MVar. Les trois premiers sont mentionnés dans le texte, tandis que le dernier semble être le favori de répondre à beaucoup de StackOverflow des questions sur les trois premiers. Ils ont tous l'air de réaliser un état entre deux invocations.
Ce sont chacune de ces et en quoi elles diffèrent l'un de l'autre?
En particulier, ces phrases n'ont aucun sens:
Au lieu de cela, nous utilisons une fonctionnalité appelée état threads, laissant Haskell gérer l'état d'agrégation pour nous. Cela nous permet de traiter les variables mutables, comme dans tout autre langage de programmation, à l'aide de fonctions d'obtenir ou de définir des variables.
et
Le IORef module vous permet d'utiliser avec état des variables au sein de l'IO monade.
Tout cela fait de la ligne, type ENV = IORef [(String, IORef LispVal)]
- confus pourquoi la deuxième IORef? Ce qui va se briser si je vais écrire `type ENV = State [(String, LispVal)]
à la place?