putStrLn не печатает на консоль

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

Решение

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

Либо очистить явно:

  putStrLn "Started"
  hFlush stdout

Или включите буферизацию строки:

  hSetBuffering stdout LineBuffering -- or even NoBuffering
  putStrLn "Started"
Другие вопросы по тегам