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 hello.hs

ターミナルで実行すると、導入する文字を要求する前に「オプションを選択してください:」という行が表示されません。これは Haskell の怠惰な性質が原因である可能性があり、修正方法がわかりません。

何か案は?

4

1 に答える 1

2

これは怠惰によるものではなく、単なるバッファリングによるものです。putStrLnの代わりに使用putStrすると機能します。

putStr と getLine を使用した間違った IO アクションの順序を参照してください。

于 2012-12-13T23:01:23.543 に答える