Estoy aprendiendo acerca de las mónadas y tengo algunas preguntas.Algunas preguntas sobre las mónadas en Haskell
Aquí es donde estoy ahora. Por favor, corrígeme donde estoy equivocado.
El símbolo
>>=
es un operador infijo. Los operadores Infix son funciones que toman dos argumentos (lado izquierdo y lado derecho) y devuelven un valor.El símbolo
>>=
se denomina operador de vinculación y tiene la firmaMonad m => m t -> (t -> m u) -> m u
. Sin embargo, los tipos no parecen alinearse aquí. Obtenemos un valor de tipom t
y el segundo argumento es una función que toma unt
. (No veo cómo conectar los puntos.)Esto debe significar que la función se unen de alguna manera es capaz de eliminar el
m
delm t
con el fin de obtener lat
y pasarlo a la función.
Aquí están mis preguntas:
es la capacidad de eliminar el
m
algo dem t
que sólo es posible dentro de un operador, tal aprieto. ¿Este operador de enlace tiene algunos privilegios especiales o algo así?¿Qué tiene que ver con los cambios de estado? Entiendo (creo) que el objetivo de las mónadas es "envolver" los efectos secundarios para que estén aislados del resto del programa. Pero, ¿cuál es el papel del operador de enlace en esto?
Esta respuesta tiene algunas afirmaciones potencialmente falsas sobre 'IO'. En GHC, al menos, la instancia 'Monad' para' IO' * se * define en un módulo, a saber 'GHC.Base', usando detalles internos" semiprivados "del tipo' IO'. Por supuesto, otras implementaciones son libres de hacer algo diferente. – dfeuer