在以下情况下出现“输入'->'解析错误”

时间:2019-11-17 22:52:46

标签: 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"

1 个答案:

答案 0 :(得分:8)

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

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

如果您在与res开始的级别相同的级别上进行编写,则将其解析为好像是let块的一部分,而不是{{ 1}}块。 同样,如果您编写的缩进少于case,则将其解析为let块的一部分,而不是res的一部分。