Включение параметра, активирующего специальный синтаксис, может привести к тому, что работающий код на Haskell 98 перестанет компилироваться, например, если в нём используется имя переменной, ставшее зарезервированным словом. В этом разделе перечислен синтаксис, «заимствуемый» языковыми расширениями. Мы используем обозначения и имена нетерминалов из лексического синтаксиса Haskell 98 (см. отчёт Haskell 98). Здесь перечислены только те изменения синтаксиса, которые могут повлиять на уже работающие программы (то есть «заимствованный» синтаксис). Многие из этих расширений также включают новый контекстно-свободный синтаксис, но во всех случаях программы, написанные с использованием нового синтаксиса, не будут компилироваться без включённого параметра.
Есть два класса специального синтаксиса:
- Новые зарезервированные слова и символы: последовательности символов, которые больше нельзя использовать в программе как идентификаторы.
- Другой специальный синтаксис: последовательности символов, значение которых меняется при включении соответствующего параметра.
Заимствуется следующий синтаксис:
-
forall -
Заимствуется по умолчанию (в типах; см. раздел Лексический синтаксис).
forall— зарезервированное ключевое слово, а не переменная типа, в соответствии с предложением GHC № 193. -
mdo -
Заимствуется расширением:
RecursiveDo -
foreign -
Заимствуется расширением:
ForeignFunctionInterface -
rec, proc, -<, >-, -<<, >>-, (|, |) -
Заимствуется расширением:
Arrows -
?varid -
Заимствуется расширением:
ImplicitParams -
[|, [e|, [p|, [d|, [t|, [||, [e|| -
Заимствуется расширением:
QuasiQuotes. Кроме того, это создаёт неоднозначность с синтаксисом списковых включений. Подробнее см. обсуждение квазицитирования. -
$(, $$(, $varid, $$varid -
Заимствуется расширением:
TemplateHaskell -
[varid| -
Заимствуется расширением:
QuasiQuotes -
⟨varid⟩, #⟨char⟩, #, ⟨string⟩, #, ⟨integer⟩, #, ⟨float⟩, #, ⟨float⟩, ## -
Заимствуется расширением:
MagicHash -
⟨integer⟩, #(Int|Word)(8|16|32|64)? -
Заимствуется расширением:
ExtendedLiterals -
(#, #) -
Заимствуется расширением:
UnboxedTuples -
⟨varid⟩, !, ⟨varid⟩ -
Заимствуется расширением:
BangPatterns -
pattern -
Заимствуется расширением:
PatternSynonyms -
static -
Заимствуется расширением:
StaticPointers