gpt4 book ai didi

haskell - 为什么 Replit 上的 GHC 会多次打印我的输入?

转载 作者:行者123 更新时间:2023-12-02 01:42:47 27 4
gpt4 key购买 nike

我正在 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

我在其他网站上测试过这段代码,代码运行正常。我在这里缺少什么?

最佳答案

我可以使用 Haskell Cabal 模板进行复制。看起来像此模板的“控制台”选项卡中的“replit”错误。控制台独立于 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 人员。

关于haskell - 为什么 Replit 上的 GHC 会多次打印我的输入?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71375220/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com