No entiendo el álgebra exacta y la teoría detrás de las mónadas de Haskell. Sin embargo, cuando pienso en la programación funcional en general, tengo la impresión de que el estado se modelaría tomando un estado inicial y generando una copia para representar el siguiente estado. Esto es como cuando una lista se agrega a otra; ninguna de las listas se modifica, pero se crea y devuelve una tercera lista.¿Se puede pensar que las mónadas de Can Haskell usan y devuelven un parámetro de estado oculto?
¿Es por lo tanto válido pensar en operaciones monádicas como tomar implícitamente un objeto de estado inicial como parámetro y devolver implícitamente un objeto de estado final? Estos objetos de estado se ocultarían para que el programador no tenga que preocuparse por ellos y controlar cómo se accede a ellos. Entonces, el programador no intentará copiar el objeto que representa la secuencia IO como lo fue hace diez minutos.
En otras palabras, si tenemos este código:
main = do
putStrLn "Enter your name:"
name <- getLine
putStrLn ("Hello " ++ name)
... ¿Está bien pensar en la mónada IO y el "hacer" la sintaxis como la representación de este tipo de código?
putStrLn :: IOState -> String -> IOState
getLine :: IOState -> (IOState, String)
main :: IOState -> IOState
-- main returns an IOState we can call "state3"
main state0 = putStrLn state2 ("Hello " ++ name)
where (state2, name) = getLine state1
state1 = putStrLn state0 "Enter your name:"
Ah sí, me olvidé de las Mónadas Maybe y Oither. – AJM
@AJM It * es * una forma válida de pensar en IO. Puedes imaginar que IO es una Mónada de estado con toda la realidad como 's'. – PyRulez