我正在使用 Replit 網站使用 GHC 運行 Haskell 程式。我在編輯器中輸入代碼并使用“運行”按鈕運行它,而不僅僅是使用 GHCi 運行代碼行。每當我使用該getLine功能時,我都會遇到奇怪的輸出問題,即使在非常簡單的程式中也是如此。例如,運行程式
main = do ans <- getLine
putStrLn ans
并hi在輸入提示符處輸入hi兩次而不是一次:
cabal v1-run
Preprocessing executable 'Cabal-example' for Cabal-example-0.1.0.0..
Building executable 'Cabal-example' for Cabal-example-0.1.0.0..
[1 of 1] Compiling Main ( Main.hs, dist/build/Cabal-example/Cabal-example-tmp/Main.o )
Linking dist/build/Cabal-example/Cabal-example ...
Running Cabal-example...
hi
hi
hi
當我嘗試在main函式中禁用輸入/輸出緩沖時,問題變得更加奇怪(我需要為我正在處理的更大程式執行此操作):
cabal v1-run
Preprocessing executable 'Cabal-example' for Cabal-example-0.1.0.0..
Building executable 'Cabal-example' for Cabal-example-0.1.0.0..
[1 of 1] Compiling Main ( Main.hs, dist/build/Cabal-example/Cabal-example-tmp/Main.o )
Linking dist/build/Cabal-example/Cabal-example ...
Running Cabal-example...
hi
hi^Jhi
我在其他網站上測驗過這段代碼,代碼運行正常。我在這里想念什么?
uj5u.com熱心網友回復:
我可以使用 Haskell Cabal 模板進行復制。看起來像此模板的“控制臺”選項卡中的“復制”錯誤。控制臺正在回顯獨立于 Haskell 程式的用戶輸入。試試這個程式:
main = do
putStrLn "Enter something"
getLine
putStrLn "I'm printing something else"
并且輸出將包括回顯輸入。(第一個“foo”之前的空格也不應該在那里。)
Running Cabal-example...
Enter something
foo <-- what I entered
foo <-- echoed by the Console
I'm printing something else
嘗試使用“cabal v1-run”在“Shell”選項卡中運行您的程式,它應該可以正常作業:
~/SympatheticVastHypothesis$ cabal v1-run
Preprocessing executable 'Cabal-example' for Cabal-example-0.1.0.0..
Building executable 'Cabal-example' for Cabal-example-0.1.0.0..
Running Cabal-example...
Enter something
This won't echo <-- what I entered
I'm printing something else
~/SympatheticVastHypothesis$
我認為您可能必須將其作為錯誤報告給replit人員。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/440932.html
上一篇:使用高階函式重寫
下一篇:Haskell顯示錯誤?
