Я працюю через Напишіть собі схему за 48 годин (я приблизно до 85 годин), і я дійшов до частини про Додавання змінних та призначень . У цій главі є великий концептуальний стрибок, і я би хотів, щоб це було зроблено у два етапи з гарним рефакторингом між ними, а не стрибком прямо до остаточного рішення. У будь-якому разі ...
Я заблукав з безліччю різних класів , які , здається, служать тієї ж мети: State, ST, IORef, і MVar. Перші три згадуються в тексті, тоді як останній, як видається, є улюбленою відповіддю на багато питань StackOverflow щодо перших трьох. Здається, всі вони мають стан між послідовними викликами.
Що таке кожен із них і чим вони відрізняються один від одного?
Зокрема, ці речення не мають сенсу:
Натомість ми використовуємо функцію, яка називається потоками стану , дозволяючи Haskell управляти агрегованим станом для нас. Це дозволяє нам обробляти змінні змінні, як це було б в будь-якій іншій мові програмування, використовуючи функції для отримання або встановлення змінних.
і
Модуль IORef дозволяє використовувати змінні зі станом у монаді IO .
Все це робить рядок type ENV = IORef [(String, IORef LispVal)]заплутаним - чому другий IORef? Що зламається, якщо я type ENV = State [(String, LispVal)]замість цього напишу ?