在下面的 Haskell 代码中,我收到一个错误“输入 'in' 上的解析错误”。根据我的阅读,我使用的缩进应该没问题。事实上,我在代码的其他地方成功地使用了具有类似缩进的 'let' 和 'in'('let' 与 'in' 对齐)。我打破了什么规则导致这个“in”成为一个问题?如果我在'in'前面添加一个空格(使其比'let'多1个空格)它编译得很好。
runTests :: IO ()
runTests = do
let results = fmap testLispExpr testLispText
resultStrings = fmap show results
putSeq (x:xs) = do putStrLn x
putSeq xs
putSeq [] = return ()
in putSeq resultStrings
感谢所有帮助。提前致谢。
最佳答案
let
do
中的语法 block 有点好笑。如果你想使用 in
,您必须将其缩进到 let
的右侧.或者,您可以省略 in
和 let
do
的其余部分将显示绑定(bind)。堵塞:
do
let ....
....
putSeq resultStrings
-- ..... (more `do` statements)
-- ^^ must all start on the same column
编辑
正如 Ørjan Johansen 所说,
do
在这种情况下实际上根本不需要,因为在 let
之后只有一个语句.所以另一个选择是省略 do
同时保持 in
关键词。他们还注意到您也可以将其写为runTests = mapM (print . testListExpr) testLispText
并真正让事情变得干净。
关于haskell - 这个 Haskell 输入缩进有什么问题?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28448931/