2012-09-15 4 views
5

Я экспериментирую с wxHaskell. Я не смог запустить приложение под ghci, поэтому мне нужно использовать приложение для его проверки. Я хотел протестировать программу с помощью отладки println. Тем не менее, кажется, что putStrLn не работает в графическом интерфейсе: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 

Если я закомментировать начать helloGui, все печатается хорошо. Однако, если я верну его, ничего не будет напечатано, но отобразится окно. Что здесь не так?

+1

буферизация вывода? Распечатывается ли оно, как только вы закрываете окно? – Thomas

+1

Да, я работал с этой функцией, которая печатает и сбрасывает. Но есть ли способ включить авто-флеш? –

ответ

13

Это, вероятно, буферизация вывода; выход не записывается до выхода программы.

либо вровень явно:

putStrLn "Started" 
    hFlush stdout 

Или включить линии буферизация:

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

Это сработало. Благодаря! –

Смежные вопросы