haskell - 这个 Haskell 输入缩进有什么问题?

标签 haskell syntax indentation let do-notation

在下面的 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 的右侧.或者,您可以省略 inlet 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/

相关文章:

c++ - "error C2059: syntax error : ' 如果 '"(Visual C++ 2010 专业版)

haskell - Typeable 类型的“模式匹配”

sql - SQL Server中for循环的语法

powershell - Powershell中私有(private)函数的缩进输出

coding-style - 如何在 Xcode 6.1 中更改花括号样式?

function - 编译器中止测试

haskell - 管道:多个流消费者

haskell - 如何将字符串解析为 Haskell 中的函数?

html - 到达页尾时制表符被修剪

haskell - 在 Let、Haskell 范围界定中,