Probablemente no entiendo muy bien la món IO.Haskell IO Monad y uso de memoria
Si escribo una aplicación que se espera que se ejecute durante muchos meses, mientras tanto registrando su progreso, ¿guardará la mónima IO toda la información de registro en la RAM hasta el final?
Desde el blog en IO Inside, modelos Haskell el mundo como
main :: RealWorld -> ((), RealWorld)
IO para que no se produce durante la ejecución de la parte del código Haskell, pero sólo cuando la aplicación vuelve desde main
.
Probablemente estoy malinterpretando esto completamente. ¿Alguien podría explicar cuando Haskell realmente hace IO?
Gracias por la buena explicación. He leído "Learn You a Haskell" (actualmente en mi segunda lectura de la sección de mónadas) y comencé "Real-World Haskell". A menos que me haya perdido algo, ninguno deja en claro que IO ocurre inmediatamente, sino que, al igual que otras mónadas, se "acumula" hasta el final.Creo que necesito ver el resultado del lenguaje ensamblador del compilador para convencerme a mí mismo :-). – Ralph
La metáfora 'RealWorld -> ((), RealWorld)' ciertamente parece implicar que la transformación ocurre en forma pura y solo se emite en su totalidad al final. Supongo que las implementaciones subyacentes de las operaciones de IO realmente ocurren "bajo demanda". – Ralph
@Ralph: la clave para entender la mónada IO es que acumula * programas *, no entradas ni salidas reales. Pocos tutoriales de Haskell explican esto bien. –