【问题标题】:Haskell debugging - syntax issuesHaskell 调试 - 语法问题
【发布时间】:2014-06-25 20:25:08
【问题描述】:

我目前正在学习 Haskell(最近我的很多问题都是从这个语句开始的)并且由于语法错误,我在编译程序时遇到了问题,主要是在识别错误​​、理解/解决 GHC 提供的错误消息方面。

例如,我花了很长时间才解决下面代码中的错误。请记住,这是取自一本 Haskell 教程书:

getNums = do
    putStrLn "enter a number (0 to terminate)"
    num <- getLine
    if read num == 0
    then return []
    else do rest <- getNums
    return ((read num :: Int):rest)

GHCI 输出错误消息也没有真正的帮助:

Number.hs:18:17:
    The last statement in a 'do' block must be an expression
      rest <- getNums

我目前正在通过 Linux 终端运行 GHCI 并手动编译,用 gedit 编写代码。我的问题是:

有没有更好的环境或设置可以为像我这样的初学者提供更深入的编译时错误解释?

即类似于 NetBeans IDE 提供关于为什么代码在语法上不正确的提示/提示的方式?

我最不想做的就是在 SO 上粘贴一个代码块,然后成为说“帮我解决这个问题”的白痴

编辑

我明白这可能不是一个很好的问题,因为它基本上是在询问人们的意见。

【问题讨论】:

  • 我个人使用带有 SublimeHaskell 插件的 Sublime Text 3,但它可能有点学习曲线,并且有一些不平凡的设置,特别是对于初学者。如果您不介意使用在线 IDE,我建议您使用 FpComplete IDE。如果您想要一些命令行工具来帮助您编写代码,hlintstylish-haskell 非常棒,并且可以通过 cabal 安装。就个人而言,即使我使用 SublimeHaskell,我也更喜欢通过终端编译和运行我的代码,因为我对执行流程有更直接的控制。
  • 谢谢,我要去看看 gedit haskell 插件,也会尝试 sublime。肯定会看 hlint 和时尚哈斯克尔。它们听起来和我正在寻找的完全一样。

标签: haskell ghc ghci


【解决方案1】:

问题在于the indentation of your code。使用空格进行缩进。缩进 4 个空格被认为是一种很好的做法。此代码完美运行:

getNums = do
    putStrLn "enter a number (0 to terminate)"
    num <- getLine
    if read num == 0
    then return []
    else do rest <- getNums
            return ((read num :: Int):rest)  

有没有更好的环境或设置可用 为 a 的编译时错误提供更深入的解释 像我这样的初学者?

我建议你离开gedit 并使用一些合适的代码编辑器。如果您更喜欢基于 GUI 的,Eclipse 似乎为 Haskell 或 Emacs/Vi 提供了一个更高级的支持。或者如果你想留在gedit,为它安装适当的Haskell插件(我听说它支持得很好。)

【讨论】:

  • 代码实际上不能在 ghci 中编译,它指出 rest 超出了范围。正如我在问题中所说,我知道错误并已修复它。正如你所说,由于压痕。将 rest
猜你喜欢
  • 1970-01-01
  • 2015-05-23
  • 2021-12-26
  • 2023-02-26
  • 1970-01-01
  • 1970-01-01
  • 2011-05-17
  • 2023-03-04
  • 1970-01-01
相关资源
最近更新 更多