Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/haskell/8.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Haskell调试-语法问题_Haskell_Ghc_Ghci - Fatal编程技术网

Haskell调试-语法问题

Haskell调试-语法问题,haskell,ghc,ghci,Haskell,Ghc,Ghci,我目前正在学习Haskell,最近我的很多问题都是从这句话开始的,由于语法错误,我在编译程序时遇到了问题,主要是在识别错误、理解/解决GHC提供的错误消息方面 例如,我花了很长时间才解决下面代码中的错误。请记住,这是从Haskell的教程中摘录的: getNums = do putStrLn "enter a number (0 to terminate)" num <- getLine if read num == 0 then return []

我目前正在学习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上粘贴一个代码块,然后做一个说要帮我解决这个问题的白痴

编辑

我理解这可能不是一个很好的问题,因为它基本上是在征求人们的意见。

问题在于你的问题。使用空格进行缩进。使用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)  
是否有更好的环境或设置可供选择 提供更深入的编译时错误解释 像我这样的初学者


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

我个人使用Sublime Text 3和Sublimitehaskell插件,但它可能是一个学习曲线,并且有一些不平凡的设置,特别是对于初学者。如果您不介意使用在线IDE,我建议您使用完整的IDE。如果您需要一些命令行工具来帮助您编写代码,hlint和Style haskell非常棒,可以通过cabal安装。就我个人而言,尽管我使用SummaleHaskell,但我更喜欢通过终端编译和运行我的代码,因为我可以更直接地控制执行流程。谢谢,我将看一看gedit haskell插件,并尝试使用Summable。肯定会关注hlint和时尚haskell。它们听起来和我想要的一模一样。代码实际上没有在ghci中编译,它声明rest超出范围。正如我在问题中所说的那样,我知道错误并已纠正。正如你所说的,由于凹痕。休息