2012-09-15 11 views
5

Sto sperimentando con wxHaskell. Non ero in grado di eseguire l'applicazione sotto ghci, quindi devo usare l'applicazione per testarlo. Volevo testare il programma con il debug di println. Tuttavia, sembra che putStrLn non funziona in GUI:putStrLn non stampa sulla console

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

Se io commento iniziare helloGui, tutto viene stampato bene. Tuttavia, se lo restituisco, non viene stampato nulla, ma viene visualizzata la finestra. Cosa c'è che non va qui?

+1

uscita? Viene stampato non appena chiudi la finestra? – Thomas

+1

Sì, ho lavorato con una funzione che stampa e svuota. Ma esiste un modo per attivare il flush automatico? –

risposta

13

Questo è probabilmente buffer di uscita; l'output non viene scritto fino alla chiusura del programma.

entrambi a filo in modo esplicito:

putStrLn "Started" 
    hFlush stdout 

o accendere linea di buffer: buffer

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

Ha funzionato. Grazie! –