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