2013-05-26 70 views
3

這是我的基本程序,但它聲明'main'沒有在'Main'模塊中定義,我該如何解決這個問題?Haskell函數'main'沒有定義?

這裏是我的程序

main = do 
-- variable 
a <- getLine 
putStrLn a 
+2

您缺少縮進​​。你能否解釋一下 –

+0

?這是我第一次和哈斯克爾一起,我會把它放在哪裏? – Canvas

+2

你必須縮進兩行'a < - getLine'和'putStrLn a',兩者同等重要。 –

回答

6

您的代碼缺少縮進,Haskell使用縮進來找出一個塊結束。

main = do 
    a <- getLine 
    putStrLn a 

上面是代碼的正確縮進形式;你應該閱讀here這篇文章,它比我更好解釋它。

+0

我認爲這是OP使用製表符造成的工件。 –

+0

如果是複製粘貼錯誤,那麼我不清楚問題中提供的(看似有效的)代碼的問題 - 我能看到的唯一錯誤就是格式化。 –

+1

是的,如果這種格式是真實的,它應該產生一個解析錯誤(只有GHC不會產生一個,它接受代碼,要檢查這是否是有意的)。 –

1

這個錯誤信息意味着編譯器沒有找到你的函數main的定義。

要運行你編譯好的程序,而不是在ghci中進行交互(我建議你做初學者),你需要main::IO()

如果你不給你的模塊一個名字,它自動地做了相當於在你的文件頂部插入module Main where

我想不出什麼辦法來產生,而不是

  • 等這個錯誤意外註釋掉主要與--{-其他註釋語法-}
  • 拼寫單詞main正確
  • 無意中編譯一個空文件。


雖然你的問題似乎顯示不正確的縮進,那是因爲這個網站沒有把標籤爲8個字符寬。我懷疑你四個空格縮進main得到它的代碼格式在任何情況下,編譯器沒有給出一個與縮進錯誤一致的錯誤信息。

我想推薦你使用空格而不是製表符來縮進,因爲它不得不調試您程序的空白。

大多數編輯器都可以配置爲將製表鍵轉換爲適當數量的空格,爲您提供相同的行對齊功能,而不會出現字符數差異。