3 io haskell if-statement do-notation
编译说
The last statement in a 'do' construct must be an expression:
rmax <- getInteger
Run Code Online (Sandbox Code Playgroud)
尝试加载包含以下代码段的文件时:
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
Run Code Online (Sandbox Code Playgroud)
它(编译器消息)是什么意思,为什么会在这里发生?(而它不在:)
main = do
line <- getLine
if null line
then return ()
else do
putStrLn $ reverseWords line
main
reverseWords :: String -> String
reverseWords = unwords . map reverse . words
Run Code Online (Sandbox Code Playgroud)
由于混合标签和空格,您的缩进可能会搞砸.实际上,在你的问题的代码片段中似乎有一个迷路选项卡,我假设你直接从你的源文件粘贴.
最有可能的是,GHC正在解释选项卡与编辑器显示选项卡的方式不同,因此它认为该do块在有问题的行之后结束.
根据经验,最好只在Haskell中使用空格.该语言为解释大多数代码编辑不同意的选项卡定义了非常具体的规则,但空格是明确且一致的.
| 归档时间: |
|
| 查看次数: |
588 次 |
| 最近记录: |