GHC似乎打破了Haskell 2010的布局规则

GHC似乎打破了Haskell 2010的布局规则,haskell,indentation,curly-braces,Haskell,Indentation,Curly Braces,考虑Haskell中的以下代码: f = y where { y = t where t = 2 } 它的本意是 f = y where y = t where t = 2 它按照GHC 8.4.4的要求编译。然而,根据研究,这看起来并不是一个合适的行为。让我解释一下。此处描述的预处理将上述代码段转换为: {1} f = y <3> where { y = t where {23} t = 2 } {1}f=y其中{y=t其中{23}

考虑Haskell中的以下代码:

f = y
  where { y = t where t = 2 }
它的本意是

f = y
  where
    y = t
      where
        t = 2
按照GHC 8.4.4的要求编译。然而,根据研究,这看起来并不是一个合适的行为。让我解释一下。此处描述的预处理将上述代码段转换为:

{1} f = y <3> where { y = t where {23} t = 2 }
{1}f=y其中{y=t其中{23}t=2}
将其应用于报告中的函数
L
,会在最后一个右括号
}
处产生解析错误!明确地说,符号
{23}
,从第二个
插入,其中
后面没有紧跟
{
,被解释为23级的隐式大括号,L报告解析错误,我们用显式大括号
}
关闭这个隐式大括号


我确实希望我犯了一些错误,但如果我没有犯,是否有任何关于行为和规范冲突的文件

直观地说,在这种情况下,应该使用行
L(t:ts)(m:ms)=}:(L(t:ts)ms)if m/=0和parse error(t)
来关闭隐式大括号,但是我找不到任何关于为什么要在这一点上应用这个等式的理由。