2010-01-06 46 views
15

就像在標題中所說的那樣:是什麼意思?我結束了我的do塊與putStrLn就像它在我看到的幾個例子中顯示,我得到一個錯誤。Haskell - 「do中的最後一個語句必須是表達式」

代碼:

main = do args <- getArgs 
      file <-readFile "TWL06.txt" 
      putStrLn results 
+2

檢查您的縮進。確保塊中的所有行都具有相同的縮進。製表符和空格是不一樣的 – newacct 2010-01-06 23:24:45

+2

如果你正在使用縮進敏感的語言,像Haskell和Python的工作,做到確保您的編輯器有理智的標籤設置。 ':在Vim中set et ts = 8 sw = 4 sta'左右。 – ephemient 2010-01-07 00:04:40

回答

21

大多數時候,那是因爲你的代碼是不對準和編譯器會認爲你「做」塊過早結束(或者有一個並不真正屬於那裏額外的代碼)

+0

保存了一天!謝謝! – hbobenicio 2017-06-30 16:38:29

17

你的最後一行是不是像someVar <- putStrLn "hello",以任何機會,是嗎?如果你試圖在最後一行做一個變量綁定,你會得到這個錯誤,因爲它相當於putStrLn "Hello" >>= \someVar -> - 它預計最後會有一個表達式。

+0

不,只是一個'putStrLn' ... – RCIX 2010-01-06 23:47:44

+0

我花了一段時間來排序了這一點....我向你致敬...先生! – 7kemZmani 2016-07-15 01:42:43

7

不正確的壓痕會導致這個錯誤。另外,不要使用標籤,只有空格。

相關問題