为什么 GHC on Replit 会多次打印我的输入?
Why is GHC on Replit printing my input multiple times?
我正在使用 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
函数中禁用 input/output 缓冲时,问题变得更加奇怪(我需要为我正在处理的较大程序执行此操作):
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
我在其他网站上测试过这段代码,代码运行正常。我在这里错过了什么?
我可以使用 Haskell Cabal 模板进行复制。看起来像是此模板的“控制台”选项卡中的“replit”错误。控制台正在独立于 Haskell 程序回显用户输入。试用程序:
main = do
putStrLn "Enter something"
getLine
putStrLn "I'm printing something else"
并且输出将包括回显输入。 (第一个“foo”之前的 space 也不应该存在。)
Running Cabal-example...
Enter something
foo <-- what I entered
foo <-- echoed by the Console
I'm printing something else
尝试 运行使用“cabal v1-运行”在“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 人员。
我正在使用 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
函数中禁用 input/output 缓冲时,问题变得更加奇怪(我需要为我正在处理的较大程序执行此操作):
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
我在其他网站上测试过这段代码,代码运行正常。我在这里错过了什么?
我可以使用 Haskell Cabal 模板进行复制。看起来像是此模板的“控制台”选项卡中的“replit”错误。控制台正在独立于 Haskell 程序回显用户输入。试用程序:
main = do
putStrLn "Enter something"
getLine
putStrLn "I'm printing something else"
并且输出将包括回显输入。 (第一个“foo”之前的 space 也不应该存在。)
Running Cabal-example...
Enter something
foo <-- what I entered
foo <-- echoed by the Console
I'm printing something else
尝试 运行使用“cabal v1-运行”在“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 人员。