Haskell的Lambda案例并没有像预期的那样在Prelude中工作,解析错误

时间:2016-02-18 04:20:58

标签: parsing haskell lambda

我已经得到了下面的函数定义(一个新的求和函数)

Prelude> :set +m
Prelude> :set -XLambdaCase
Prelude> let sum2=\case
Prelude|     []->0
Prelude|     x:xs->x+sumw xs
Prelude| 

<interactive>:31:5:
    parse error (possibly incorrect indentation or mismatched brackets)

为什么它不起作用?

1 个答案:

答案 0 :(得分:3)

有两个问题。

  1. 由于let是块预告片,因此let之后的下一个标记(在这种情况下,即sum2)设置块的缩进级别。由于您将[]x:xs模式放在与sum2相同的缩进级别,因此它们是let块的一部分 - 当您可能希望它们成为其中的一部分时\case块的。{简单的解决方案是将两个模式缩进至少一个字符。

  2. 因为您对空格过敏,所以您不小心尝试定义名为(=\)的运算符。添加空格以明确表示您尝试定义sum2

  3. 在一起,你得到:

    Prelude> let sum2= \case
    Prelude|      []->0
    Prelude|      x:xs->x+sumw xs
    Prelude|
    Prelude>