Есть два способа, помимо двух IORef, сделать это, но вам, безусловно, нужно больше, чем последний предложенный вами тип, который не позволяет вам изменять значения, с которыми связаны имена, в лексической области видимости. Гугл "проблема funargs" для множества интересных предысторий.

отаю черезНапишите себе схему за 48 часов (Я до 85 часов), и я получил часть оДобавление переменных и назначений, В этой главе есть большой концептуальный скачок, и мне бы хотелось, чтобы он был сделан в два этапа, с хорошим рефакторингом между ними, вместо того, чтобы прыгать прямо к окончательному решению. Так или иначе…

Я заблудился с несколькими различными классами, которые, кажется, служат одной и той же цели:State, ST, IORef, а такжеMVar, Первые три упоминаются в тексте, в то время как последний, кажется, является предпочтительным ответом на многие вопросы StackOverflow о первых трех. Кажется, что все они несут состояние между последовательными вызовами.

Каковы все эти и чем они отличаются друг от друга?

В частности, эти предложения не имеют смысла:

Вместо этого мы используем функцию под названиемгосударственные темыПозволяя Haskell управлять совокупным состоянием для нас. Это позволяет нам обрабатывать изменяемые переменные так же, как и в любом другом языке программирования, используя функции для получения или установки переменных.

а также

Модуль IORef позволяет использовать переменные с состояниемв монаде IO.

Все это делает линиюtype ENV = IORef [(String, IORef LispVal)] сбивает с толку - почему второйIORef? Что сломается если я напишуtype ENV = State [(String, LispVal)] вместо?

Ответы на вопрос(3)

Ваш ответ на вопрос