Haskell 不 return 来自 getLine

Haskell does not return from getLine

出于某种原因,Haskell 在我的机器上从不 return 来自任何 getLine 调用。例如,我尝试 运行 以下代码直接来自 Learn You a Haskell for Great Good:

main = do  
    putStrLn "Hello, what's your name?"  
    name <- getLine  
    putStrLn ("Hey " ++ name ++ ", you rock!")  

当我 运行 它时,第一行被打印出来,当我输入一个名字时,我看到了我的输入,但是当我按下 Enter 时,程序只是阻塞在那里,从不打印最后一行。

我该如何解决这个问题?

编辑:我运行从 Sublime IDE 中获取它,也许这与它有关

快速搜索 Sublime 运行 的程序后,我发现 a youtube video (edit: and this SO post) 说 Sublime 的 "run program" 功能只能显示输出,不能读取输入。

因此看起来您必须从命令行或使用 :main 从 GHCi 中 运行 您的程序。后者可能是最方便的,因为 Sublime 实际上支持 GHCi 选项卡,因此您仍然可以在 Sublime 中执行所有操作。

这似乎是 Sublime 的 Build 命令中的一个限制(假设这是您正在使用的命令)。

Sublime 使用 runhaskell 执行脚本,但显然,它不捕获 STDIN(这有点道理 - 构建结果通常是 read-only 而不是交互式会话)。

解决方法:运行 命令行中的脚本

runhaskell script.hs

一切都按预期进行