Ich verstehe wahrscheinlich die IO-Monade sehr gut.Haskell IO Monad und Speicher verwenden
Wenn ich eine Anwendung schreibe, die voraussichtlich für viele Monate läuft und währenddessen ihren Fortschritt protokolliert, wird die IO-Monade alle Protokollinformationen bis zum Ende im RAM halten?
Aus dem Blog auf IO Inside, Haskell-Modelle der Welt als
main :: RealWorld -> ((), RealWorld)
so dass IO nicht während der Ausführung des Haskell Teil des Codes auftritt, aber nur, wenn die Anwendung kehrt von main
.
Ich bin wahrscheinlich völlig falsch interpretieren. Könnte jemand erklären, , wenn Haskell tatsächlich IO?
Danke für die nette Erklärung. Ich habe "Learn You a Haskell" gelesen (derzeit in meiner zweiten Lesung der Monaden) und habe "Real-World Haskell" gestartet. Wenn ich etwas nicht verpasse, macht keiner klar, dass IO sofort auftritt, sondern wie andere Monaden bis zum Ende "akkumuliert" wird.Ich denke, ich muss mir die Assemblerausgabe des Compilers ansehen, um mich zu überzeugen :-). – Ralph
Die Metapher 'RealWorld -> ((), RealWorld) scheint sicher zu implizieren, dass die Transformation in einer reinen Form abläuft und erst am Ende in ihrer Gesamtheit ausgestrahlt wird. Ich denke, die zugrundeliegenden Implementierungen der IO-Operationen finden tatsächlich "on demand" statt. – Ralph
@Ralph: Der Schlüssel zum Verständnis der IO-Monade ist, dass es * Programme * sammelt, nicht tatsächliche Eingabe und Ausgabe. Wenige Haskell Tutorials erklären das gut. –