Haskell不从getLine返回

时间:2017-02-12 14:17:41

标签: haskell sublimetext

出于某种原因,我的机器上的Haskell永远不会从任何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运行它,也许这与它有关

2 个答案:

答案 0 :(得分:5)

在快速搜索Sublime如何运行程序后,我发现a youtube video(编辑:和this SO post)说Sublime的“运行程序”功能只能显示输出而且不能阅读输入。

所以看起来你必须使用:main从命令行或GHCi中运行你的程序。后者可能是最方便的,因为Sublime实际上支持GHCi选项卡,所以你仍然可以在Sublime中做任何事情。

答案 1 :(得分:3)

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

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

解决方法:使用

从命令行运行脚本
runhaskell script.hs

一切都按预期工作