Подумайте о следующем коде в Haskell:
f = y
where { y = t where t = 2 }
Его предполагаемое значение:
f = y
where
y = t
where
t = 2
, и оно компилируется как задумано с GHC 8.4.4.Однако это не выглядит как соответствующее поведение в соответствии с Разделом 10.3 Haskell 2010 Language Report .Позволь мне объяснить.Описанный там препроцесс превращает приведенный выше фрагмент в:
{1} f = y <3> where { y = t where {23} t = 2 }
Применение этого к функции L
в отчете приводит к ошибке синтаксического анализа в последней закрывающей скобке }
!Явно, символ {23}
, который вставляется, поскольку за вторым where
не следует {
, интерпретируется как неявная открытая скобка уровня 23, и L сообщает об ошибке синтаксического анализа для нас, закрывая эту неявную открытуюфигурная скобка с явной закрывающей скобкой }
!
Я действительно надеюсь, что совершаю какую-то ошибку, но если нет, есть ли документ об этом конфликте поведения и спецификации?