我已经得到了下面的函数定义(一个新的求和函数)
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)
为什么它不起作用?
答案 0 :(得分:3)
有两个问题。
由于let
是块预告片,因此let
之后的下一个标记(在这种情况下,即sum2
)设置块的缩进级别。由于您将[]
和x:xs
模式放在与sum2
相同的缩进级别,因此它们是let
块的一部分 - 当您可能希望它们成为其中的一部分时\case
块的。{简单的解决方案是将两个模式缩进至少一个字符。
因为您对空格过敏,所以您不小心尝试定义名为(=\)
的运算符。添加空格以明确表示您尝试定义sum2
。
在一起,你得到:
Prelude> let sum2= \case
Prelude| []->0
Prelude| x:xs->x+sumw xs
Prelude|
Prelude>