【发布时间】:2012-01-02 11:17:00
【问题描述】:
编译器说
The last statement in a 'do' construct must be an expression:
rmax <- getInteger
尝试加载包含以下 sn-ps 代码的文件时:
getInteger :: IO Integer
getInteger = readLn
main :: IO ()
main = do
putStrLn "specify upper limit of results"
rmax <- getInteger
if rmax `notElem` mot
then do putStrLn "run again and enter a multiple of 10"
else do print pAllSorted
它(编译器消息)是什么意思,为什么会出现在这里? (而它不在:)
main = do
line <- getLine
if null line
then return ()
else do
putStrLn $ reverseWords line
main
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
【问题讨论】:
-
因为根据您发布的内容,rmax
-
“流浪标签”清晰可见here。始终使用 { ; 可以完全避免这种类型的错误。 } 显式分隔符。那么空格或制表符不能破坏代码,无论视觉外观可能是不连贯的。
标签: if-statement haskell io do-notation