2010-01-06 44 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

不正确的压痕会导致这个错误。另外,不要使用标签,只有空格。

相关问题