GHC, кажется, нарушает правило компоновки Haskell 2010 - PullRequest
0 голосов
/ 17 декабря 2018

Подумайте о следующем коде в 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 сообщает об ошибке синтаксического анализа для нас, закрывая эту неявную открытуюфигурная скобка с явной закрывающей скобкой }!

Я действительно надеюсь, что совершаю какую-то ошибку, но если нет, есть ли документ об этом конфликте поведения и спецификации?

...