6.1.2. Overview of all language extensions¶
GHC supports these language extensions:
| Extension | Description | 
|---|---|
| Allow the user to write ambiguous types, and the type inference engine to infer them. | |
| Enable Applicative do-notation desugaring | |
| Enable arrow notation extension | |
| Enable bang patterns. | |
| Enable support for binary literals. | |
| Allow  | |
| Enable the CAPI calling convention. | |
| Enable constrained class methods. | |
| Enable a kind of constraints. | |
| Enable the C preprocessor. | |
| Enable detection of complete user-supplied kind signatures. | |
| Enable datatype promotion. | |
| Allow contexts on  | |
| Enable default signatures. | |
| Enable deriving for any class. | |
| Enable deriving for the  | |
| Enable deriving for the Foldable class.
Implied by  | |
| Enable deriving for the Functor class.
Implied by  | |
| Enable deriving for the Generic class. | |
| Enable deriving for the Lift class | |
| Enable deriving for the Traversable class.
Implies  | |
| Enables deriving strategies. | |
| Enable deriving instances  | |
| Enable record field disambiguation.
Implied by  | |
| Allow definition of record types with identically-named fields. | |
| Allow empty case alternatives. | |
| Allow definition of empty  | |
| Allow deriving instances of standard type classes for empty data types. | |
| Enable liberalised type synonyms. | |
| Enable explicit universal quantification.
Implied by  | |
| Enable using the keyword  | |
| Use GHCi's extended default rules in a normal module. | |
| Enable flexible contexts. | |
| Enable flexible instances.
Implies  | |
| Enable foreign function interface. | |
| Enable functional dependencies.
Implies  | |
| Enable generalised algebraic data types.
Implies  | |
| Enable generalised algebraic data type syntax. | |
| Enable newtype deriving. | |
| Enable prim calling convention. Intended for internal use only. | |
| Use the Haskell 2010 language variant. | |
| Use the Haskell 98 language variant. | |
| Enable support for hexadecimal floating point literals. | |
| Enable Implicit Parameters. | |
| Don't implicitly  | |
| 
 | |
| Enable impredicative types.
Implies  | |
| Enable incoherent instances.
Implies  | |
| Enable instance signatures. | |
| Enable interruptible FFI. | |
| Enable kind signatures.
Implied by  | |
| Enable lambda-case expressions. | |
| Use whitespace to determine whether the minus sign stands for negation or subtraction. | |
| Enable liberalised type synonyms. | |
| Enable linear types. | |
| Allow  | |
| Enable monad comprehensions. | |
| Enable monadfail desugaring. | |
| Enable do not generalise local bindings.
Implied by  | |
| Disable the monomorphism restriction. | |
| Enable multi parameter type classes.
Implied by  | |
| Enable multi-way if-expressions. | |
| Enable record puns. | |
| Enable named wildcards. | |
| Enable support for negative literals. | |
| Allow nested contexts to be at the same indentation level as its enclosing context. | |
| Enable support for  | |
| Deprecated, does nothing. nullary (no parameter) type
classes are now enabled using  | |
| Enable support for 'fractional' integer literals. | |
| Enable support for numeric underscores. | |
| Enable overlapping instances. | |
| Enable overloaded labels. | |
| Enable overloaded lists. | |
| Enable overloaded string literals. | |
| Enable package-qualified imports. | |
| Enable parallel list comprehensions. | |
| Enable partial type signatures. | |
| Disable pattern guards.
Implied by  | |
| Enable pattern synonyms. | |
| Enable kind polymorphism.
Implies  | |
| Enable postfix operators. | |
| Enable qualified do-notation desugaring. | |
| Allow  | |
| Enable quasiquotation. | |
| Enable rank-2 types.
Synonym for  | |
| Enable rank-N types.
Implied by  | |
| Employ rebindable syntax.
Implies  | |
| Enable record wildcards.
Implies  | |
| Enable recursive do (mdo) notation. | |
| Enable role annotations. | |
| Enable the Safe Haskell Safe mode. | |
| Enable lexically-scoped type variables. | |
| Enable standalone deriving. | |
| Allow the use of standalone kind signatures. | |
| Treat  | |
| Enable static pointers. | |
| Make bindings in the current module strict by default. | |
| Enable default strict datatype fields. | |
| Enable Template Haskell. | |
| Enable quotation subset of Template Haskell. | |
| Disable support for traditional record syntax
(as supported by Haskell 98)  | |
| Enable generalised list comprehensions. | |
| Enable the Safe Haskell Trustworthy mode. | |
| Enable tuple sections. | |
| Enable type application syntax in terms and types. | |
| Enable type families.
Implies  | |
| Enable injective type families.
Implies  | |
| Deprecated. Enable kind polymorphism and datatype promotion. | |
| Enable type operators.
Implies  | |
| Enable type synonyms in instance heads.
Implied by  | |
| Enable unboxed sums. | |
| Enable the use of unboxed tuple syntax. | |
| Enable undecidable instances. | |
| Allow all superclass constraints, including those that may result in non-termination of the typechecker. | |
| Enable unicode syntax. | |
| Enable unlifted FFI types | |
| Enable unlifted newtypes. | |
| Enable Safe Haskell Unsafe mode. | |
| Enable view patterns. |