haskell - 有 "parse error on input ‘->’ "的情况下

标签 haskell

我在这个简单的 haskell 代码中遇到了一个奇怪的错误。
我确认我在任何地方都使用空格并且我没有看到任何缩进问题。

我是否错过了出现此语法错误的内容?

    it "I can play with Maybe a bit" $ do
      let b = Just "whatever"

      let res = case b of
        Just val -> "There is a value, and it is a value" --parse error on input ‘->’
        Nothing  -> "There is nothing!"

      res `shouldBe` "There is a value, and it is a value"

最佳答案

case 的缩进级别应该至少比 let 语句的变量名开头多一个空格,例如:

let res = case b of
     Just val -> "There is a value, and it is a value"
     Nothing  -> "There is nothing!"

如果你写在与res相同的级别开始,它被解析为好像它是 let 的一部分块,而不是 caselet堵塞。
同样,如果你写的比 res 缩进少,它被解析为好像它是 do 的一部分块,而不是 case .

关于haskell - 有 "parse error on input ‘->’ "的情况下,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58905982/

相关文章:

performance - 如何提高在 Haskell 中为输出生成字符串的性能

performance - 如何减少 Haskell 的并行化开销?

haskell - 根据另一个具有更自由的可扩展效果的编码效果

selenium - 通过 Haskell 和 webdriver 重用现有的 Selenium session

haskell - 如何在计算随机值的 haskell 程序中构造 monad?

haskell - 弗雷格与 haskell 的分数等价于什么?

list - Haskell Tuple 在无限列表上的解构在将 Tuple 作为参数解构时与使用 let 解构时的行为不同

haskell - 流融合在 Haskell 中是如何工作的?

haskell - 使用类型类将值与 Haskell 中的类型相关联

haskell - 为什么 Parsec Choice 运算符似乎取决于解析器的顺序?