这个Haskell let-in缩进有什么问题?

4 syntax haskell indentation let do-notation

在下面的Haskell代码中,我得到一个错误"输入中的解析错误".从我读过的,我用过的缩进应该没问题.事实上,我在代码的其他地方使用'let'和'in'进行了类似的缩进('let'与'in'对齐).我打破了什么规则会导致这个'in'出现问题?如果我在'in'前面添加一个空格(使其比'let'更加一个空格),它编译得很好.

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
Run Code Online (Sandbox Code Playgroud)

所有帮助表示赞赏.提前致谢.

dfe*_*uer 7

letdo块中的语法有点滑稽.如果你想使用in,你必须将它缩进到右侧let.或者,您可以跳过in,并且块let的其余部分将显示绑定do.

编辑

正如ØrjanJohansen指出的那样,do在这种情况下根本不需要; 你可以简单地把它留下来.他们也注意到你可以写

           do
             let ....
                 ....
             putSeq resultStrings
         --  ..... (more `do` statements)
         --  ^^ must all start on the same column
Run Code Online (Sandbox Code Playgroud)

并且真的让事情变得干净

  • 第三种选择是跳过`do`,因为只有一个语句. (5认同)