Разница между состоянием, ST, IORef и MVar

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

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

Что такое каждый из них и чем они отличаются друг от друга?


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

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

и

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

87
задан Robin Green 20 May 2018 в 12:25
поделиться