Parsing 哈斯克尔';s Lambda案没有';未按预期在序曲中工作,分析错误
下面是函数的定义(一个新的求和函数)Parsing 哈斯克尔';s Lambda案没有';未按预期在序曲中工作,分析错误,parsing,haskell,lambda,Parsing,Haskell,Lambda,下面是函数的定义(一个新的求和函数) 前奏曲>:set+m 前奏曲>:设置-XLambdaCase 前奏曲>让sum2=\case 前奏曲|[]->0 前奏曲| x:xs->x+sumw-xs 前奏曲 :31:5: 分析错误(可能缩进不正确或括号不匹配) 为什么它不起作用?有两个问题 由于let是块先驱,因此let之后的下一个标记(在本例中,即sum2)设置块的缩进级别。由于您将[]和x:xs模式放置在与sum2相同的缩进级别,因此它们是let块的一部分,而您可能希望它们成为\case块的一部
前奏曲>:set+m
前奏曲>:设置-XLambdaCase
前奏曲>让sum2=\case
前奏曲|[]->0
前奏曲| x:xs->x+sumw-xs
前奏曲
:31:5:
分析错误(可能缩进不正确或括号不匹配)
为什么它不起作用?有两个问题
let
是块先驱,因此let
之后的下一个标记(在本例中,即sum2
)设置块的缩进级别。由于您将[]
和x:xs
模式放置在与sum2
相同的缩进级别,因此它们是let
块的一部分,而您可能希望它们成为\case
块的一部分。简单的解决方案是将两个模式缩进至少一个字符(=\)
的运算符。添加一个空格,以明确您正试图定义的是sum2
Prelude> let sum2= \case
Prelude| []->0
Prelude| x:xs->x+sumw xs
Prelude|
Prelude>
仍然失败::28:12:parse error on input`case'@viksantata检查您是否确实启用了
LambdaCase
扩展,正如您在问题中所做的那样。啊,仍然存在缩进问题:我需要额外的空间在sum2之后生成[]。非常感谢。
Prelude> let sum2= \case
Prelude| []->0
Prelude| x:xs->x+sumw xs
Prelude|
Prelude>