Я думаю, что более подходящая категоризация была бы разделить его по трубопроводу компилятора:
Синтаксических расширения
- -XMagicHash
- -XUnicodeSyntax
- -XNewQualifiedOperators
- -XViewPatterns
- - XNPlusKPatterns
- -XDoRec
- -XTransformListComp
- -XNoImplicitPrelude
- -XPostfixOperators
- -XTupleSections
- -XDisambiguateRecordFields
- -XNamedFieldPuns
- -XRecordWildCards
- -XPackageImports
- -XExplicitForAll
- -XKindSignatures
- ...
Тип системы Расширения
- -XUnboxedTuples
- -XLiberalTypeSynonyms
- -XGADTs
- -XMultiParamTypeClasses
- -XFlexibleContexts
- -XConstrainedClassMethods
- -XOverlappingInstances и -XIncoherentInstances
- -XTypeFamilies
- -XImplicitParams
Сквозные расширения
- -XTemplateHaskell
- -XForeignFunctionInterface
Optimizatsions
- -fenable-перезаписи-правила
- -fspec-КОНСТРУКТОР Расширения
- -O2
Код поколения
среды выполнения Расширения
Что вы думаете? Не каждый флаг является либо (а) определяемым с точки зрения существующих конструкций, либо (б) новой частью компилятора. Это более тонкий.
Есть много других расширений, посмотрите, можете ли вы классифицировать их в этой форме.
Я не уверен, насколько значимым является это различие - учитывая полноту Тьюринга, в некотором смысле все остальное является просто «удобством». Конечно, писать Haskell вместо, о, Lazy K ** чрезвычайно удобен ... –