5

wxHaskell を試しています。ghci でアプリを実行できなかったので、アプリケーションを使用してテストする必要があります。println デバッグでプログラムをテストしたかったのです。ただし、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 をコメント アウトすると、すべてが適切に出力されます。しかし、私がそれを返すと、何も印刷されず、ウィンドウが表示されます。ここで何が問題なのですか?

4

1 に答える 1

14

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

明示的にフラッシュします。

  putStrLn "Started"
  hFlush stdout

または行バッファリングをオンにします:

  hSetBuffering stdout LineBuffering -- or even NoBuffering
  putStrLn "Started"
于 2012-09-15T08:52:20.607 に答える