2012-09-15 20 views
5

私はwxHaskellを試しています。私はghciの下でアプリケーションを実行することができませんでしたので、私はそれをテストするためにアプリケーションを使用する必要があります。 printlnのデバッグを使ってプログラムをテストしたかったのです。しかし、putStrLnはGUIでは動作しないようです。putStrLnがコンソールに出力されない

{-# LANGUAGE Haskell2010 #-} 

module Main where 

import Graphics.UI.WX 

drawUI dc view = do 
    circle dc (point 10 10) 5 [penKind := PenSolid, color := red] 
    putStrLn "painted" 

helloGui :: IO() 
helloGui = do 
    f <- frame [ 
    text := "Example", 
    resizeable := False, 
    bgcolor := white, 
    layout := space 400 300, 
    on paint := drawUI] 
    return() 

main :: IO() 
main = do 
    putStrLn "Started" 
    start helloGui 

私がstart helloGuiをコメントアウトすると、すべてがうまく印刷されます。しかし、返すと何も印刷されませんが、ウィンドウが表示されます。ここで何が間違っていますか?

+1

出力バッファリング?ウィンドウを閉じるとすぐに印刷されますか? – Thomas

+1

はい、私は印刷してフラッシュする関数でこの作業を行いました。しかし、自動フラッシュをオンにする方法はありますか? –

答えて

13

これはおそらく出力バッファリングです。プログラムが終了するまで出力は書き込まれません。

のいずれかを明示的にフラッシュ:

putStrLn "Started" 
    hFlush stdout 

またはラインバッファリングをオンにする:

hSetBuffering stdout LineBuffering -- or even NoBuffering 
    putStrLn "Started" 
+0

それは働いた。ありがとう! –

関連する問題