Ich habe ein sehr seltsames Problem. Der folgende Code gibt andere Ergebnisse, wenn er im Vergleich zur Ausführung in ghci kompiliert wird,
%Vor%Wenn es in ghci ausgeführt wird, tut es das, was man erwarten würde,
%Vor%Wenn ich jedoch den Code zu einer ausführbaren Datei kompiliere, muss ich die Eingabe bereitstellen, bevor eine Ausgabe generiert wird, damit ich damit fertig bin,
%Vor%Ich habe schon einmal ein ähnliches Problem gesehen, aber ich kann es nicht mehr finden.
Ich verwende ghc Version 7.4.1 von der Haskell Platform Version 2012.2.0.0.
Jeder hat eine Idee, warum sie unterschiedliche Ergebnisse geben und wie ich beide Versionen dazu bringen kann, das "richtige" Ding zu machen?
Es ist ein Pufferproblem. Normalerweise ist IO liniengepuffert (d. H. Die Ausgabe wird nicht auf dem Bildschirm angezeigt, bis Sie eine neue Zeile drucken oder die Puffergröße überschreiten), es sei denn, Sie löschen den Puffer explizit. In Ghci ist es nicht, so dass das Problem nicht auftaucht.
Sie können hFlush stdout
verwenden, um stdout zu leeren, damit die Ausgabe auf dem Bildschirm gedruckt wird, bevor Sie getLine
aufrufen.
Alternativ können Sie hSetBuffering NoBuffering
verwenden, um die Pufferung vollständig zu deaktivieren, sodass hFlush
nicht mehr benötigt wird. Das könnte sich jedoch negativ auf die IO-Performance auswirken.