1

可能重复:
使用 putStr 和 getLine 的错误 IO 操作顺序

我是一个haskell初学者。

我正在尝试制作一个通过终端显示菜单并要求用户引入选项的程序。这是代码:

main :: IO ()
main = do
    putStrLn "0    <- quit"
    putStrLn "1    <- Hello"
    putStr "Choose an option: "
    c <- getChar
    case c of
        '0' -> return ()
        '1' -> putChar '\n' >> putStrLn "Hello World" >> main

当我在 ghci 解释器中使用这个模块时,一切都像它应该做的那样工作。但如果我编译这个:

ghc你好.hs

并在终端中运行它,它在要求引入字符之前不显示“选择一个选项:”行。我认为这可能是由于 haskell 懒惰的性质造成的,我不知道如何解决它。

有任何想法吗?

4

1 回答 1

2

这不是因为懒惰,只是缓冲。使用putStrLn代替,putStr它会工作。

请参阅使用 putStr 和 getLine 的错误 IO 操作顺序

于 2012-12-13T23:01:23.543 回答