5

我正在试验 wxHaskell。我无法在 ghci 下运行应用程序,所以我必须使用应用程序来测试它。我想用 println 调试来测试程序。但是,putStrLn 似乎在 GUI 中不起作用:

{-# 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 回答