GHCi und kompilierter Code scheinen sich anders zu verhalten

8

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?

    
Doug Moore 12.08.2012, 22:36
quelle

1 Antwort

12

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.

    
sepp2k 12.08.2012, 22:39
quelle

Tags und Links