Haskell - “'do'结构中的最后一个语句必须是一个表达式”

时间:2010-01-06 22:51:53

标签: haskell syntax io monads

就像标题中所说:The last statement in a 'do' construct must be an expression是什么意思?我用do结束了putStrLn块,就像我看过的几个例子中所示,我收到了错误。

代码:

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

3 个答案:

答案 0 :(得分:23)

大多数情况下,这是因为你的代码是错误对齐的,并且编译器假定你的“do”块过早地结束(或者有额外的代码并不真正属于那里)

答案 1 :(得分:17)

你的最后一行不是someVar <- putStrLn "hello",不管怎样,是吗?如果你试图在最后一行做一个变量绑定,你会得到那个错误,因为它等同于putStrLn "Hello" >>= \someVar -> - 它希望最后有一个表达式。

答案 2 :(得分:7)

错误的缩进可能会导致此错误。另外,最好不要使用制表符,只使用空格。