6.1.2. Overview of all language extensions

GHC supports these language extensions:

Extension Description
AllowAmbiguousTypes Allow the user to write ambiguous types, and the type inference engine to infer them.
ApplicativeDo Enable Applicative do-notation desugaring
Arrows Enable arrow notation extension
BangPatterns Enable bang patterns.
BinaryLiterals Enable support for binary literals.
BlockArguments Allow do blocks and other constructs as function arguments.
CApiFFI Enable the CAPI calling convention.
ConstrainedClassMethods Enable constrained class methods.
ConstraintKinds Enable a kind of constraints.
CPP Enable the C preprocessor.
CUSKs Enable detection of complete user-supplied kind signatures.
DataKinds Enable datatype promotion.
DatatypeContexts Allow contexts on data types.
DeepSubsumption Enable deep subsumption
DefaultSignatures Enable default signatures.
DeriveAnyClass Enable deriving for any class.
DeriveDataTypeable Enable deriving for the Data class.
DeriveFoldable Enable deriving for the Foldable class. Implied by DeriveTraversable.
DeriveFunctor Enable deriving for the Functor class. Implied by DeriveTraversable.
DeriveGeneric Enable deriving for the Generic class.
DeriveLift Enable deriving for the Lift class
DeriveTraversable Enable deriving for the Traversable class. Implies DeriveFunctor and DeriveFoldable.
DerivingStrategies Enables deriving strategies.
DerivingVia Enable deriving instances via types of the same runtime representation. Implies DerivingStrategies.
DisambiguateRecordFields Enable record field disambiguation. Implied by RecordWildCards.
DuplicateRecordFields Allow definition of record types with identically-named fields.
EmptyCase Allow empty case alternatives.
EmptyDataDecls Allow definition of empty data types.
EmptyDataDeriving Allow deriving instances of standard type classes for empty data types.
ExistentialQuantification Enable liberalised type synonyms.
ExplicitForAll Enable explicit universal quantification. Implied by ScopedTypeVariables, LiberalTypeSynonyms, RankNTypes and ExistentialQuantification.
ExplicitNamespaces Enable using the keyword type to specify the namespace of entries in imports and exports (Explicit namespaces in import/export). Implied by TypeOperators and TypeFamilies.
ExtendedDefaultRules Use GHCi's extended default rules in a normal module.
ExtendedLiterals Enable numeric literal postfix syntax for unboxed integers.
FieldSelectors Control visibility of field selector functions.
FlexibleContexts Remove some restrictions on class contexts
FlexibleInstances Enable flexible instances. Implies TypeSynonymInstances.
ForeignFunctionInterface Enable foreign function interface.
FunctionalDependencies Enable functional dependencies. Implies MultiParamTypeClasses.
GADTs Enable generalised algebraic data types. Implies GADTSyntax and MonoLocalBinds.
GADTSyntax Enable generalised algebraic data type syntax.
GeneralisedNewtypeDeriving Enable newtype deriving.
GHC2021 Use GHC’s set of default language extensions from 2021
GHCForeignImportPrim Enable prim calling convention. Intended for internal use only.
Haskell2010 Use the Haskell 2010 language variant.
Haskell98 Use the Haskell 98 language variant.
HexFloatLiterals Enable support for hexadecimal floating point literals.
ImplicitParams Enable Implicit Parameters.
ImplicitPrelude Don't implicitly import Prelude. Implied by RebindableSyntax.
ImportQualifiedPost ImportQualifiedPost allows the syntax import M qualified
ImpredicativeTypes Enable impredicative types. Implies RankNTypes.
IncoherentInstances Enable incoherent instances. Implies OverlappingInstances.
InstanceSigs Enable instance signatures.
InterruptibleFFI Enable interruptible FFI.
KindSignatures Enable kind signatures. Implied by TypeFamilies and PolyKinds.
LambdaCase Enable lambda-case expressions.
LexicalNegation Use whitespace to determine whether the minus sign stands for negation or subtraction.
LiberalTypeSynonyms Enable liberalised type synonyms.
LinearTypes Enable linear types.
MagicHash Allow # as a postfix modifier on identifiers.
MonadComprehensions Enable monad comprehensions.
MonoLocalBinds Enable do not generalise local bindings. Implied by TypeFamilies and GADTs.
MonomorphismRestriction Disable the monomorphism restriction.
MultiParamTypeClasses Enable multi parameter type classes. Implied by FunctionalDependencies.
MultiWayIf Enable multi-way if-expressions.
NamedFieldPuns Enable record puns.
NamedWildCards Enable named wildcards.
NegativeLiterals Enable support for negative literals.
NondecreasingIndentation Allow nested contexts to be at the same indentation level as its enclosing context.
NPlusKPatterns Enable support for n+k patterns. Implied by Haskell98.
NullaryTypeClasses Deprecated, does nothing. nullary (no parameter) type classes are now enabled using MultiParamTypeClasses.
NumDecimals Enable support for 'fractional' integer literals.
NumericUnderscores Enable support for numeric underscores.
OverlappingInstances Enable overlapping instances.
OverloadedLabels Enable overloaded labels.
OverloadedLists Enable overloaded lists.
OverloadedRecordDot Record '.' syntax
OverloadedRecordUpdate Record '.' syntax record updates
OverloadedStrings Enable overloaded string literals.
PackageImports Enable package-qualified imports.
ParallelListComp Enable parallel list comprehensions.
PartialTypeSignatures Enable partial type signatures.
PatternGuards Disable pattern guards. Implied by Haskell98.
PatternSynonyms Enable pattern synonyms.
PolyKinds Enable kind polymorphism. Implies KindSignatures.
PostfixOperators Enable postfix operators.
QualifiedDo Enable qualified do-notation desugaring.
QuantifiedConstraints Allow forall quantifiers in constraints.
QuasiQuotes Enable quasiquotation.
Rank2Types Enable rank-2 types. Synonym for RankNTypes.
RankNTypes Enable rank-N types. Implied by ImpredicativeTypes.
RebindableSyntax Employ rebindable syntax. Implies NoImplicitPrelude.
RecordWildCards Enable record wildcards. Implies DisambiguateRecordFields.
RecursiveDo Enable recursive do (mdo) notation.
RoleAnnotations Enable role annotations.
Safe Enable the Safe Haskell Safe mode.
ScopedTypeVariables Enable lexically-scoped type variables.
StandaloneDeriving Enable standalone deriving.
StandaloneKindSignatures Allow the use of standalone kind signatures.
StarIsType Treat * as Data.Kind.Type.
StaticPointers Enable static pointers.
Strict Make bindings in the current module strict by default.
StrictData Enable default strict datatype fields.
TemplateHaskell Enable Template Haskell.
TemplateHaskellQuotes Enable quotation subset of Template Haskell.
TraditionalRecordSyntax Disable support for traditional record syntax (as supported by Haskell 98) C {f = x}
TransformListComp Enable generalised list comprehensions.
Trustworthy Enable the Safe Haskell Trustworthy mode.
TupleSections Enable tuple sections.
TypeAbstractions Enable type abstraction syntax in patterns and type variable binders.
TypeApplications Enable type application syntax in terms and types.
TypeData Enable type data declarations.
TypeFamilies Enable type families. Implies ExplicitNamespaces, KindSignatures, and MonoLocalBinds.
TypeFamilyDependencies Enable injective type families. Implies TypeFamilies.
TypeInType Deprecated. Enable kind polymorphism and datatype promotion.
TypeOperators Enable type operators. Implies ExplicitNamespaces.
TypeSynonymInstances Enable type synonyms in instance heads. Implied by FlexibleInstances.
UnboxedSums Enable unboxed sums.
UnboxedTuples Enable the use of unboxed tuple syntax.
UndecidableInstances Enable undecidable instances.
UndecidableSuperClasses Allow all superclass constraints, including those that may result in non-termination of the typechecker.
UnicodeSyntax Enable unicode syntax.
UnliftedDatatypes Enable unlifted data types.
UnliftedFFITypes Enable unlifted FFI types
UnliftedNewtypes Enable unlifted newtypes.
Unsafe Enable Safe Haskell Unsafe mode.
ViewPatterns Enable view patterns.