20

就像它在标题中所说:什么The last statement in a 'do' construct must be an expression意思?我用我见过的几个例子中的类似结束了我的do块,我得到了一个错误。putStrLn

代码:

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

3 回答 3

28

大多数时候,这是因为您的代码未对齐并且编译器假定您的“do”块过早结束(或者有额外的代码实际上不属于那里)

于 2010-01-06T23:43:40.320 回答
20

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

于 2010-01-06T22:57:54.927 回答
7

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

于 2010-01-07T00:25:44.177 回答