出于某种原因,我的机器上的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运行它,也许这与它有关
答案 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
一切都按预期工作