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.
Implied by MultiParamTypeClasses . |
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 |
GHC2024 |
Use GHC’s set of default language extensions from 2024 |
GHCForeignImportPrim |
Enable prim calling convention. Intended for internal use only. |
Haskell2010 |
Use the Haskell 2010 language edition. |
Haskell98 |
Use the Haskell 98 language edition. |
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.
Implies MonoLocalBinds . |
ListTuplePuns |
Enable punning for list, tuple and sum 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 .
Implies ConstrainedClassMethods . |
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. |
RequiredTypeArguments |
Enable required type arguments in terms. |
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. |