這個問題在這里已經有了答案: 使用 getLine 和 putStr 時 IO 發生故障 3 個答案 16 天前關閉。
我想撰寫一個 Haskell 程式,它輸出提示并在提示輸出到的同一行上接受用戶輸入。為了做到這一點,我相信我需要強制評估功能putStr。
echoWithPrompt :: IO ()
echoWithPrompt = do
putStr "input: "
echo <- getLine :: IO String
putStrLn echo
main :: IO ()
main = do
echoWithPrompt
在用戶輸入一行之前,按原樣運行它不會列印“input:”。我嘗試過類似的事情
write <- putStr "input: "
echo <- write `deepseq` getLine :: IO String
或者
putStr $! "input: "
試圖強制列印訊息但無濟于事。
uj5u.com熱心網友回復:
那只是由于沖洗。這與懶惰無關。您可以使用以下命令重繪 標準輸出:
import System.IO(hFlush, stdout)
echoWithPrompt :: IO ()
echoWithPrompt = do
putStr "input: "
hFlush stdout
echo <- getLine
putStrLn echo
或更短:
import System.IO(hFlush, stdout)
echoWithPrompt :: IO ()
echoWithPrompt = putStr "input: " >> hFlush stdout >> getLine >>= putStrLn
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/517156.html
標籤:哈斯克尔懒惰评估
下一篇:Haskell中的堆疊
