就像标题中所说:The last statement in a 'do' construct must be an expression
是什么意思?我用do
结束了putStrLn
块,就像我看过的几个例子中所示,我收到了错误。
代码:
main = do args <- getArgs
file <-readFile "TWL06.txt"
putStrLn results
答案 0 :(得分:23)
大多数情况下,这是因为你的代码是错误对齐的,并且编译器假定你的“do”块过早地结束(或者有额外的代码并不真正属于那里)
答案 1 :(得分:17)
你的最后一行不是someVar <- putStrLn "hello"
,不管怎样,是吗?如果你试图在最后一行做一个变量绑定,你会得到那个错误,因为它等同于putStrLn "Hello" >>= \someVar ->
- 它希望最后有一个表达式。
答案 2 :(得分:7)
错误的缩进可能会导致此错误。另外,最好不要使用制表符,只使用空格。