Probabilmente non sto capendo molto bene la monade IO.Haskell IO Monad e memoria utilizzano
Se scrivo un'applicazione che dovrebbe funzionare per molti mesi, nel frattempo registrando il suo stato di avanzamento, la monade IO terrà tutte le informazioni del registro nella RAM fino alla fine?
Dal blog su IO Inside, modelli Haskell il mondo come
main :: RealWorld -> ((), RealWorld)
in modo che IO non si verifica durante l'esecuzione della parte Haskell del codice, ma solo quando l'applicazione ritorna da main
.
Probabilmente sto interpretando erroneamente questo. Qualcuno potrebbe spiegare quando Haskell fa effettivamente IO?
Grazie per la bella spiegazione. Ho letto "Learn You a Haskell" (attualmente nella mia seconda lettura della sezione monadi) e ho iniziato "Real-World Haskell". A meno che non mi sia sfuggito qualcosa, non è chiaro che IO si verifica immediatamente, ma piuttosto, come altre monadi, viene "accumulato" fino alla fine.Credo di aver bisogno di guardare l'output in linguaggio assembly del compilatore per convincermi :-). – Ralph
La metafora 'RealWorld -> ((), RealWorld) sembra implicare che la trasformazione avvenga in forma pura e alla fine venga emessa solo nella sua interezza. Immagino che le implementazioni sottostanti delle operazioni di I/O avvengano effettivamente "su richiesta". – Ralph
@ Ralph: la chiave per comprendere la monade IO è che accumula * programmi *, non effettivi input e output. Pochi tutorial di Haskell lo spiegano bene. –