使用 `as` 语法进行惰性模式匹配的语法

fla*_*awr 11 haskell ghci

在(香草)GHCi 8.6.5 中,以下功能完全有效:

f xs@ ~(x:xt) = xs
Run Code Online (Sandbox Code Playgroud)

如果我现在在 9.0.1 中执行相同操作,则会出现错误

Suffix occurrence of @. For an as-pattern, remove the leading whitespace.
Run Code Online (Sandbox Code Playgroud)

仅删除@和之间的空白~似乎还不够,因为那样@~会被解释为运算符,所以我发现的唯一有效变体是

f xs@(~(x:xt)) = xs
Run Code Online (Sandbox Code Playgroud)

我想知道以下内容,但在更改说明中找不到答案:

  1. 从 8.6.5 到 9.0.1 究竟发生了什么变化,导致了这种不兼容性?
  2. xs@(~(x:xt))真的写这种模式的最好方法,还是有超过这个优选的方法是什么?

shr*_*t18 10

此处描述了 GHC 9.0 中对 ~ 和 @ 处理的更改。引用迁移指南:

GHC 9.0 实现了 Proposal 229,这意味着 !、~ 和 @ 字符对前后空格比以前更敏感。结果,过去以一种方式解析的某些内容现在将以不同的方式解析(或引发解析错误)。