我认为更合适的分类是将其划分为编译器管道:
语法扩展
- -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
代码生成扩展程序
运行时扩展程序
你怎么看?并非每个标志都是(a)可以根据现有结构定义,或者(b)编译器的新部分。它更加微妙。
还有许多其他扩展,看看你是否可以用这种形式对它们进行分类。
这些标记已经在GHC用户指南的flag reference中进行了分类,语言扩展分为language features部分中的各种类别。