使用`as`语法进行惰性模式匹配的语法
在(香草)GHCi 8.6.5 中,以下功能完全有效:
f xs@ ~(x:xt) = xs
如果我现在在 9.0.1 中执行相同操作,则会出现错误
Suffix occurrence of @. For an as-pattern, remove the leading whitespace.
仅删除@和之间的空白~似乎还不够,因为那样@~会被解释为运算符,所以我发现的唯一有效变体是
f xs@(~(x:xt)) = xs
我想知道以下内容,但在更改说明中找不到答案:
- 从 8.6.5 到 9.0.1 究竟发生了什么变化,导致了这种不兼容性?
- 是
xs@(~(x:xt))真的写这种模式的最好方法,还是有超过这个优选的方法是什么?
回答
此处描述了 GHC 9.0 中对 ~ 和 @ 处理的更改。引用迁移指南:
GHC 9.0 实现了 Proposal 229,这意味着 !、~ 和 @ 字符对前后空格比以前更敏感。结果,过去以一种方式解析的某些内容现在将以不同的方式解析(或引发解析错误)。