2012-09-15 14 views
5

Estoy experimentando con wxHaskell. No pude ejecutar la aplicación bajo ghci, así que tengo que usar la aplicación para probarla. Quería probar el programa con la depuración de println. Sin embargo, parece que putStrLn no funciona en la interfaz gráfica de usuario:putStrLn no se imprime en la consola

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

Si comento hacia fuera a empezar helloGui, todo lo que se imprime bien. Sin embargo, si lo devuelvo, no se imprime nada, pero se muestra la ventana. ¿Qué pasa aquí?

+1

salida? ¿Se imprime tan pronto como cierras la ventana? – Thomas

+1

Sí, trabajé esto con una función que imprime y vacía. Pero, ¿hay alguna forma de activar el auto-flush? –

Respuesta

13

Esto es probablemente salida de almacenamiento en búfer; la salida no se escribe hasta que el programa sale.

De cualquier manera explícita al ras:

putStrLn "Started" 
    hFlush stdout 

o encender la línea de amortiguación: buffering

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

Funcionó. ¡Gracias! –

Cuestiones relacionadas