【问题标题】:Haskell does not return from getLineHaskell 不从 getLine 返回
【发布时间】:2017-02-12 14:17:41
【问题描述】:

由于某种原因,我机器上的 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 运行它,也许这与它有关

【问题讨论】:

  • 你是如何运行程序的?从 IDE/编辑器(哪个?)或命令行(哪个终端仿真器、操作系统等)?当你说它阻塞时,这意味着程序继续运行(即不是窗口(如果有)只是关闭或返回命令提示符),它只是不产生输出,对吗?当你按下回车键时光标会移动到下一行还是好像你从来没有按下过回车键一样?
  • 谢谢你的提问,我应该提到它。我从 IDE 运行它:Sublime

标签: haskell sublimetext


【解决方案1】:

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

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

【讨论】:

    【解决方案2】:

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

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

    解决方法:从命令行运行脚本

    runhaskell script.hs
    

    一切都按预期进行

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2010-09-20
      • 1970-01-01
      • 1970-01-01
      • 2011-06-10
      • 2016-01-26
      • 2011-04-02
      • 2021-02-27
      • 1970-01-01
      相关资源
      最近更新 更多