簡體   English   中英

Haskell調試-語法問題

[英]Haskell debugging - syntax issues

我目前正在學習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的GUI,那么Eclipse似乎可以為Haskell或Emacs / Vi提供更好的支持。 或者,如果您希望繼續使用gedit ,請為其安裝適當的Haskell插件(我聽說它支持得很好)。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM