Estoy trabajando en Escriba usted mismo un esquema en 48 horas (estoy hasta aproximadamente 85 horas) y he llegado a la parte sobre cómo agregar variables y asignaciones . Hay un gran salto conceptual en este capítulo, y desearía que se hubiera hecho en dos pasos con una buena refactorización en el medio en lugar de saltar directamente a la solución final. De todas formas…
He conseguido perdido con un número de diferentes clases que parecen servir al mismo propósito: State
, ST
, IORef
, y MVar
. Los tres primeros se mencionan en el texto, mientras que el último parece ser la respuesta preferida a muchas preguntas de StackOverflow sobre los tres primeros. Todos parecen tener un estado entre invocaciones consecutivas.
¿Cuáles son cada uno de estos y en qué se diferencian unos de otros?
En particular, estas oraciones no tienen sentido:
En su lugar, usamos una función llamada subprocesos de estado , lo que permite que Haskell administre el estado agregado por nosotros. Esto nos permite tratar las variables mutables como lo haríamos en cualquier otro lenguaje de programación, usando funciones para obtener o establecer variables.
y
El módulo IORef le permite utilizar variables con estado dentro de la mónada IO .
Todo esto hace que la línea sea type ENV = IORef [(String, IORef LispVal)]
confusa, ¿por qué la segunda IORef
? ¿Qué se romperá si escribo en su type ENV = State [(String, LispVal)]
lugar?