ABCDEFGHIJKLMNOPQRSTUVWXYZAAABAC
1
DescriptionStabilityNeg Stability
Included from
Excluded fromNotesImplied byImplies
2
AllowAmbiguousTypesAllow the user to write ambiguous types, and the type inference engine to infer them.ExperimentalStableWorsens type errors and usually better to use visible forall; unimplemented proposal to allow AMBIGUOUS pragmas instead
3
AlternativeLayoutRuleDeprecatedDeprecatedUndocumented https://gitlab.haskell.org/ghc/ghc/-/issues/11359
4
AlternativeLayoutRuleTransitional
DeprecatedDeprecatedUndocumented https://gitlab.haskell.org/ghc/ghc/-/issues/11359
5
ApplicativeDoEnable Applicative do-notation desugaringExperimentalStableProposed alternative ApplicativeComprehensions https://github.com/ghc-proposals/ghc-proposals/pull/526 and looks somewhat complex/buggy https://gitlab.haskell.org/ghc/ghc/-/issues/17768
6
ArrowsEnable arrow notation extensionExperimentalStableLongstanding bugs https://gitlab.haskell.org/ghc/ghc/-/issues/344
7
AutoDeriveTypeableDeprecated; now default. Automatically derive Typeable for all user-defined datatypesDeprecatedDeprecatedAlwaysUndocumented. Cannot be disabled since GHC 8.2
8
BangPatternsEnable bang patterns.StableStableGHC2021
9
BinaryLiteralsEnable support for binary literals.StableStableGHC2021
10
BlockArgumentsAllow do blocks and other constructs as function arguments.StableStableGHC20XX?
11
CApiFFIEnable the CAPI calling convention.StableStableGHC20XX?
12
ConstrainedClassMethodsEnable constrained class methods.StableStableGHC2021MultiParamTypeClasses
13
ConstraintKindsEnable a kind of constraints.StableStableGHC2021
14
CPPEnable the C preprocessor.StableStable
15
CUSKsEnable detection of complete user-supplied kind signatures.LegacyStableHaskell2010StandaloneKindSignatures is a better alternative
16
DataKindsEnable datatype promotion.StableStableGHC2024TypeData is a partial alternative; proposal under review to split out TypeLevelLiterals
17
DatatypeContextsAllow contexts on data types.LegacyStableHaskell2010Command-line flag emits a deprecation warning already, but part of Haskell2010, so cannot be removed for now
18
DeepSubsumptionEnable deep subsumptionLegacyStableHaskell98GHC2021For backwards compatibility with pre-simplified subsumption code
19
DefaultSignaturesEnable default signatures.StableStableGHC20XX?
20
DeriveAnyClassEnable deriving for any class.StableStableRichard's proposal excludes from Stable2024
21
DeriveDataTypeableEnable deriving for the Data class.StableStableGHC2021Rename to DeriveData, since Typeable is now auto-derived?
22
DeriveFoldableEnable deriving for the Foldable class.StableStableGHC2021DeriveTraversable
23
DeriveFunctorEnable deriving for the Functor class.StableStableGHC2021DeriveTraversable
24
DeriveGenericEnable deriving for the Generic class.StableStableGHC2021
25
DeriveLiftEnable deriving for the Lift classStableStableGHC2021
26
DeriveTraversableEnable deriving for the Traversable class.StableStableGHC2021DeriveFunctor, DeriveFoldable
27
DerivingStrategiesEnables deriving strategies.StableStableGHC2024
28
DerivingViaEnable deriving instances via types of the same runtime representation.StableStableGHC20XX?Candidate for GHC20xxDerivingStrategies
29
DisambiguateRecordFieldsEnable record field disambiguation.StableStableGHC2024RecordWildCards
30
DoAndIfThenElseAllow unindented if-then-else inside do notationStableLegacyHaskell2010Undocumented but part of Haskell2010 and later, so probably best to keep it (https://gitlab.haskell.org/ghc/ghc/-/issues/18631#note_540744)
31
DoRecDeprecatedDeprecatedUndocumented, replaced by RecursiveDoRecursiveDo
32
DuplicateRecordFieldsAllow definition of record types with identically-named fields.ExperimentalStableRichard's proposal includes in Stable2024
33
EmptyCaseAllow empty case alternatives.StableStableGHC2021
34
EmptyDataDeclsAllow definition of empty data types.StableStableGHC2021
35
EmptyDataDerivingAllow deriving instances of standard type classes for empty data types.StableStableGHC2021
36
ExistentialQuantificationAllow existentially quantified type variables in types.StableStableGHC2021
37
ExplicitForAllEnable explicit universal quantification.StableStableGHC2021ScopedTypeVariables, LiberalTypeSynonyms, RankNTypes, ExistentialQuantification
38
ExplicitLevelImportsExperimentalStableNew in GHC 9.14; good future direction but needs stabilising
39
ExplicitNamespacesEnable using the keyword type to specify the namespace of entries in imports and exports (Explicit namespaces in import/export).StableStableGHC2024Proposals to add features (but backwards-compatible), still okay to be Stable?TypeOperators, TypeFamilies
40
ExtendedDefaultRulesUse GHCi's extended default rules in a normal module.StableStableOn by default in GHCi
41
ExtendedLiteralsAllows defining unboxed numeric primitive values through #Type suffixesStable?StableGHC20XX?New in GHC 9.8. Richard's proposal includes in Stable2024
42
FieldSelectorsControl visibility of field selector functions.StableExperimentalHaskell98Richard proposes using NoFieldSelectors by default
43
FlexibleContextsRemove some restrictions on class contextsStableStableGHC2021
44
FlexibleInstancesEnable flexible instances.StableStableGHC2021TypeSynonymInstances
45
ForeignFunctionInterfaceEnable foreign function interface.StableStableHaskell2010
46
FunctionalDependenciesEnable functional dependencies.ExperimentalStableDark corners of FunDeps + MPTCs + overlapping instances should be Experimental because the semantics is not well-defined. But MPTCs are Stable, and overlapping instances are available without an extension, so that implies FunDeps need to be ExperimentalMultiParamTypeClasses
47
GADTsEnable generalised algebraic data types.StableStableGHC2024Not formally part of GHC2021, although GADTSyntax and ExistentialQuantification areGADTSyntax, MonoLocalBinds
48
GADTSyntaxEnable generalised algebraic data type syntax.StableStableGHC2021
49
GeneralisedNewtypeDerivingEnable newtype deriving.StableStableGHC2021
50
GHCForeignImportPrimEnable prim calling convention. Intended for internal use only.ExperimentalStableDocumentation states "This feature is not intended for use outside of the core libraries that come with GHC." Richard's proposal allows in Stable2024.
51
HexFloatLiteralsEnable support for hexadecimal floating point literals.StableStableGHC2021
52
ImplicitParamsEnable Implicit Parameters.StableStable
53
ImplicitPreludeDon't implicitly import Prelude.StableStableHaskell98(Negatively) RebindableSyntax
54
ImplicitStagePersistenceStableExperimentalHaskell98New in GHC 9.14, default enabled
55
ImportQualifiedPostAllows the syntax import M qualifiedStableStableGHC2021
56
ImpredicativeTypesEnable impredicative types.
Experimental->Stable?
StableGHC20XX?Is this good enough to stabilise now, or does it have negative consequences?RankNTypes
57
IncoherentInstancesEnable incoherent instances.ExperimentalStableMostly replaced by INCOHERENT pragmas, but still needed for given/wanted incoherence and role annotations on classes. Should be split and only partly Deprecated. Richard's proposal allows in Stable2024.OverlappingInstances
58
InstanceSigsEnable instance signatures.StableStableGHC2021
59
InterruptibleFFIEnable interruptible FFI.
Stable->Experimental
StableZubin has concerns? Maybe should be reclassified Experimental?
60
JavaScriptFFIExperimentalStable
Undocumented and doesn't do anything https://gitlab.haskell.org/ghc/ghc/-/issues/23940
InterruptibleFFI
61
KindSignaturesEnable kind signatures.StableStableGHC2021TypeFamilies, PolyKinds
62
LambdaCaseEnable lambda-case expressions.StableStableGHC2024
63
LazyFieldAnnotationsStableStableGHC20XX?New, but Stable as a dependency of Strict?
64
LexicalNegationUse whitespace to determine whether the minus sign stands for negation or subtraction.Stable?StableGHC20XX?
65
LiberalTypeSynonymsEnable liberalised type synonyms.StableStableGHC20XX?Does this have negative consequences?
66
LinearTypesEnable linear types.ExperimentalStable
67
ListTuplePunsStableExperimentalNew
68
MagicHashAllow # as a postfix modifier on identifiers.StableStableGHC20XX?Forces (#) as an operator to have whitespace, but good to allow a bunch of low-level stuff without extensions
69
ModifiersExperimentalStableNew
70
MonadComprehensionsEnable monad comprehensions.StableStable
71
MonoLocalBindsDo not generalise local bindings.StableLegacyGHC2024Not part of GHC2021 although ExistentialQuantification and GADTSyntax are. NoMonoLocalBinds is discouraged but remains Legacy due to widespread useTypeFamilies, GADTs
72
MonomorphismRestrictionDisable the monomorphism restriction.StableStableHaskell98Switched off in GHCi
73
MultilineStringsExperimentalStableNew
74
MultiParamTypeClassesEnable multi parameter type classes.StableStableGHC2021FunctionalDependenciesConstrainedClassMethods
75
MultiWayIfEnable multi-way if-expressions.StableStable\cases from LambdaCase is more general, so prefer that?
76
NamedDefaultsExperimentalStableNew
77
NamedFieldPunsEnable record puns.StableStableGHC2021
78
NamedWildCardsEnable named wildcards.StableStableGHC2021Proposal to tweak design of wildcards, but part of GHC2021 so Stable
79
NegativeLiteralsEnable support for negative literals.TBC: Stable?StablePerhaps Legacy as being replaced by LexicalNegation?
80
NondecreasingIndentationAllow nested contexts to be at the same indentation level as its enclosing context.LegacyStableHaskell98Haskell2010Documentation not very clear about status. Used by H98 only. Error messages include "Suggested fix: Perhaps you intended to use NondecreasingIndentation" when perhaps it should not be suggested? Richard excludes from Stable2024
81
NPlusKPatternsEnable support for n+k patterns.LegacyStableHaskell98
82
NullaryTypeClassesDeprecatedDeprecatedDocumentation claims "Deprecated, does nothing. nullary (no parameter) type classes are now enabled using MultiParamTypeClasses." but actually it does still enable nullary type classes.
83
NumDecimalsEnable support for 'fractional' integer literals.StableStableGHC20XX?
84
NumericUnderscoresEnable support for numeric underscores.StableStableGHC2021
85
OrPatternsExperimentalStableNew
86
OverlappingInstancesEnable overlapping instances.DeprecatedDeprecatedUse OVERLAP* pragmas instead
87
OverloadedLabelsEnable overloaded labels.StableStable
88
OverloadedListsEnable overloaded lists.StableStable
89
OverloadedRecordDotRecord '.' syntaxStableStable
90
OverloadedRecordUpdateRecord '.' syntax record updatesExperimentalStableChange to Experimental after implementation of https://github.com/ghc-proposals/ghc-proposals/pull/583
91
OverloadedStringsEnable overloaded string literals.StableStableCan introduce ambiguities, and exposes users to unxpected instance behaviour (e.g. https://github.com/haskell/bytestring/issues/140)
92
PackageImportsEnable package-qualified imports.DeprecatedDeprecatedBlurs boundaries between GHC and package manager. Unclear if this should be Legacy or Deprecated; see https://gitlab.haskell.org/ghc/ghc/-/issues/25025 and https://gitlab.haskell.org/ghc/ghc/-/issues/24227
93
ParallelArraysDeprecatedDeprecatedUndocumented. Presumably a leftover of DPH. Only effect is enabling ParallelListComp. Enabled by base.ParallelListComp
94
ParallelListCompEnable parallel list comprehensions.StableStableProbably nothing wrong with this, but not widely used or liked enough to include in GHC20xx?
95
PartialTypeSignaturesEnable partial type signatures.StableStable
96
PatternGuardsEnable pattern guards.StableStableHaskell98
97
PatternSignaturesDeprecated synonym for ScopedTypeVariables
Experimental/Deprecated?
StableChanges proposed (https://github.com/ghc-proposals/ghc-proposals/pull/608); mark as Deprecated then change to Experimental when those changes land?
ScopedTypeVariables
98
PatternSynonymsEnable pattern synonyms.StableStable
99
PolyKindsEnable kind polymorphism.StableStableGHC2021KindSignatures
100
PolymorphicComponentsDeprecatedDeprecatedUndocumented, synonym for RankNTypes