| A | B | C | D | E | F | G | H | I | J | K | L | M | N | O | P | Q | R | S | T | U | V | W | X | Y | Z | AA | AB | AC | ||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
1 | Description | Stability | Neg Stability | Included from | Excluded from | Notes | Implied by | Implies | ||||||||||||||||||||||
2 | AllowAmbiguousTypes | Allow the user to write ambiguous types, and the type inference engine to infer them. | Experimental | Stable | Worsens type errors and usually better to use visible forall; unimplemented proposal to allow AMBIGUOUS pragmas instead | |||||||||||||||||||||||||
3 | AlternativeLayoutRule | Deprecated | Deprecated | Undocumented https://gitlab.haskell.org/ghc/ghc/-/issues/11359 | ||||||||||||||||||||||||||
4 | AlternativeLayoutRuleTransitional | Deprecated | Deprecated | Undocumented https://gitlab.haskell.org/ghc/ghc/-/issues/11359 | ||||||||||||||||||||||||||
5 | ApplicativeDo | Enable Applicative do-notation desugaring | Experimental | Stable | Proposed 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 | Arrows | Enable arrow notation extension | Experimental | Stable | Longstanding bugs https://gitlab.haskell.org/ghc/ghc/-/issues/344 | |||||||||||||||||||||||||
7 | AutoDeriveTypeable | Deprecated; now default. Automatically derive Typeable for all user-defined datatypes | Deprecated | Deprecated | Always | Undocumented. Cannot be disabled since GHC 8.2 | ||||||||||||||||||||||||
8 | BangPatterns | Enable bang patterns. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
9 | BinaryLiterals | Enable support for binary literals. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
10 | BlockArguments | Allow do blocks and other constructs as function arguments. | Stable | Stable | GHC20XX? | |||||||||||||||||||||||||
11 | CApiFFI | Enable the CAPI calling convention. | Stable | Stable | GHC20XX? | |||||||||||||||||||||||||
12 | ConstrainedClassMethods | Enable constrained class methods. | Stable | Stable | GHC2021 | MultiParamTypeClasses | ||||||||||||||||||||||||
13 | ConstraintKinds | Enable a kind of constraints. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
14 | CPP | Enable the C preprocessor. | Stable | Stable | ||||||||||||||||||||||||||
15 | CUSKs | Enable detection of complete user-supplied kind signatures. | Legacy | Stable | Haskell2010 | StandaloneKindSignatures is a better alternative | ||||||||||||||||||||||||
16 | DataKinds | Enable datatype promotion. | Stable | Stable | GHC2024 | TypeData is a partial alternative; proposal under review to split out TypeLevelLiterals | ||||||||||||||||||||||||
17 | DatatypeContexts | Allow contexts on data types. | Legacy | Stable | Haskell2010 | Command-line flag emits a deprecation warning already, but part of Haskell2010, so cannot be removed for now | ||||||||||||||||||||||||
18 | DeepSubsumption | Enable deep subsumption | Legacy | Stable | Haskell98 | GHC2021 | For backwards compatibility with pre-simplified subsumption code | |||||||||||||||||||||||
19 | DefaultSignatures | Enable default signatures. | Stable | Stable | GHC20XX? | |||||||||||||||||||||||||
20 | DeriveAnyClass | Enable deriving for any class. | Stable | Stable | Richard's proposal excludes from Stable2024 | |||||||||||||||||||||||||
21 | DeriveDataTypeable | Enable deriving for the Data class. | Stable | Stable | GHC2021 | Rename to DeriveData, since Typeable is now auto-derived? | ||||||||||||||||||||||||
22 | DeriveFoldable | Enable deriving for the Foldable class. | Stable | Stable | GHC2021 | DeriveTraversable | ||||||||||||||||||||||||
23 | DeriveFunctor | Enable deriving for the Functor class. | Stable | Stable | GHC2021 | DeriveTraversable | ||||||||||||||||||||||||
24 | DeriveGeneric | Enable deriving for the Generic class. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
25 | DeriveLift | Enable deriving for the Lift class | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
26 | DeriveTraversable | Enable deriving for the Traversable class. | Stable | Stable | GHC2021 | DeriveFunctor, DeriveFoldable | ||||||||||||||||||||||||
27 | DerivingStrategies | Enables deriving strategies. | Stable | Stable | GHC2024 | |||||||||||||||||||||||||
28 | DerivingVia | Enable deriving instances via types of the same runtime representation. | Stable | Stable | GHC20XX? | Candidate for GHC20xx | DerivingStrategies | |||||||||||||||||||||||
29 | DisambiguateRecordFields | Enable record field disambiguation. | Stable | Stable | GHC2024 | RecordWildCards | ||||||||||||||||||||||||
30 | DoAndIfThenElse | Allow unindented if-then-else inside do notation | Stable | Legacy | Haskell2010 | Undocumented but part of Haskell2010 and later, so probably best to keep it (https://gitlab.haskell.org/ghc/ghc/-/issues/18631#note_540744) | ||||||||||||||||||||||||
31 | DoRec | Deprecated | Deprecated | Undocumented, replaced by RecursiveDo | RecursiveDo | |||||||||||||||||||||||||
32 | DuplicateRecordFields | Allow definition of record types with identically-named fields. | Experimental | Stable | Richard's proposal includes in Stable2024 | |||||||||||||||||||||||||
33 | EmptyCase | Allow empty case alternatives. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
34 | EmptyDataDecls | Allow definition of empty data types. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
35 | EmptyDataDeriving | Allow deriving instances of standard type classes for empty data types. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
36 | ExistentialQuantification | Allow existentially quantified type variables in types. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
37 | ExplicitForAll | Enable explicit universal quantification. | Stable | Stable | GHC2021 | ScopedTypeVariables, LiberalTypeSynonyms, RankNTypes, ExistentialQuantification | ||||||||||||||||||||||||
38 | ExplicitLevelImports | Experimental | Stable | New in GHC 9.14; good future direction but needs stabilising | ||||||||||||||||||||||||||
39 | ExplicitNamespaces | Enable using the keyword type to specify the namespace of entries in imports and exports (Explicit namespaces in import/export). | Stable | Stable | GHC2024 | Proposals to add features (but backwards-compatible), still okay to be Stable? | TypeOperators, TypeFamilies | |||||||||||||||||||||||
40 | ExtendedDefaultRules | Use GHCi's extended default rules in a normal module. | Stable | Stable | On by default in GHCi | |||||||||||||||||||||||||
41 | ExtendedLiterals | Allows defining unboxed numeric primitive values through #Type suffixes | Stable? | Stable | GHC20XX? | New in GHC 9.8. Richard's proposal includes in Stable2024 | ||||||||||||||||||||||||
42 | FieldSelectors | Control visibility of field selector functions. | Stable | Experimental | Haskell98 | Richard proposes using NoFieldSelectors by default | ||||||||||||||||||||||||
43 | FlexibleContexts | Remove some restrictions on class contexts | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
44 | FlexibleInstances | Enable flexible instances. | Stable | Stable | GHC2021 | TypeSynonymInstances | ||||||||||||||||||||||||
45 | ForeignFunctionInterface | Enable foreign function interface. | Stable | Stable | Haskell2010 | |||||||||||||||||||||||||
46 | FunctionalDependencies | Enable functional dependencies. | Experimental | Stable | Dark 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 Experimental | MultiParamTypeClasses | ||||||||||||||||||||||||
47 | GADTs | Enable generalised algebraic data types. | Stable | Stable | GHC2024 | Not formally part of GHC2021, although GADTSyntax and ExistentialQuantification are | GADTSyntax, MonoLocalBinds | |||||||||||||||||||||||
48 | GADTSyntax | Enable generalised algebraic data type syntax. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
49 | GeneralisedNewtypeDeriving | Enable newtype deriving. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
50 | GHCForeignImportPrim | Enable prim calling convention. Intended for internal use only. | Experimental | Stable | Documentation states "This feature is not intended for use outside of the core libraries that come with GHC." Richard's proposal allows in Stable2024. | |||||||||||||||||||||||||
51 | HexFloatLiterals | Enable support for hexadecimal floating point literals. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
52 | ImplicitParams | Enable Implicit Parameters. | Stable | Stable | ||||||||||||||||||||||||||
53 | ImplicitPrelude | Don't implicitly import Prelude. | Stable | Stable | Haskell98 | (Negatively) RebindableSyntax | ||||||||||||||||||||||||
54 | ImplicitStagePersistence | Stable | Experimental | Haskell98 | New in GHC 9.14, default enabled | |||||||||||||||||||||||||
55 | ImportQualifiedPost | Allows the syntax import M qualified | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
56 | ImpredicativeTypes | Enable impredicative types. | Experimental->Stable? | Stable | GHC20XX? | Is this good enough to stabilise now, or does it have negative consequences? | RankNTypes | |||||||||||||||||||||||
57 | IncoherentInstances | Enable incoherent instances. | Experimental | Stable | Mostly 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 | InstanceSigs | Enable instance signatures. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
59 | InterruptibleFFI | Enable interruptible FFI. | Stable->Experimental | Stable | Zubin has concerns? Maybe should be reclassified Experimental? | |||||||||||||||||||||||||
60 | JavaScriptFFI | Experimental | Stable | Undocumented and doesn't do anything https://gitlab.haskell.org/ghc/ghc/-/issues/23940 | InterruptibleFFI | |||||||||||||||||||||||||
61 | KindSignatures | Enable kind signatures. | Stable | Stable | GHC2021 | TypeFamilies, PolyKinds | ||||||||||||||||||||||||
62 | LambdaCase | Enable lambda-case expressions. | Stable | Stable | GHC2024 | |||||||||||||||||||||||||
63 | LazyFieldAnnotations | Stable | Stable | GHC20XX? | New, but Stable as a dependency of Strict? | |||||||||||||||||||||||||
64 | LexicalNegation | Use whitespace to determine whether the minus sign stands for negation or subtraction. | Stable? | Stable | GHC20XX? | |||||||||||||||||||||||||
65 | LiberalTypeSynonyms | Enable liberalised type synonyms. | Stable | Stable | GHC20XX? | Does this have negative consequences? | ||||||||||||||||||||||||
66 | LinearTypes | Enable linear types. | Experimental | Stable | ||||||||||||||||||||||||||
67 | ListTuplePuns | Stable | Experimental | New | ||||||||||||||||||||||||||
68 | MagicHash | Allow # as a postfix modifier on identifiers. | Stable | Stable | GHC20XX? | Forces (#) as an operator to have whitespace, but good to allow a bunch of low-level stuff without extensions | ||||||||||||||||||||||||
69 | Modifiers | Experimental | Stable | New | ||||||||||||||||||||||||||
70 | MonadComprehensions | Enable monad comprehensions. | Stable | Stable | ||||||||||||||||||||||||||
71 | MonoLocalBinds | Do not generalise local bindings. | Stable | Legacy | GHC2024 | Not part of GHC2021 although ExistentialQuantification and GADTSyntax are. NoMonoLocalBinds is discouraged but remains Legacy due to widespread use | TypeFamilies, GADTs | |||||||||||||||||||||||
72 | MonomorphismRestriction | Disable the monomorphism restriction. | Stable | Stable | Haskell98 | Switched off in GHCi | ||||||||||||||||||||||||
73 | MultilineStrings | Experimental | Stable | New | ||||||||||||||||||||||||||
74 | MultiParamTypeClasses | Enable multi parameter type classes. | Stable | Stable | GHC2021 | FunctionalDependencies | ConstrainedClassMethods | |||||||||||||||||||||||
75 | MultiWayIf | Enable multi-way if-expressions. | Stable | Stable | \cases from LambdaCase is more general, so prefer that? | |||||||||||||||||||||||||
76 | NamedDefaults | Experimental | Stable | New | ||||||||||||||||||||||||||
77 | NamedFieldPuns | Enable record puns. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
78 | NamedWildCards | Enable named wildcards. | Stable | Stable | GHC2021 | Proposal to tweak design of wildcards, but part of GHC2021 so Stable | ||||||||||||||||||||||||
79 | NegativeLiterals | Enable support for negative literals. | TBC: Stable? | Stable | Perhaps Legacy as being replaced by LexicalNegation? | |||||||||||||||||||||||||
80 | NondecreasingIndentation | Allow nested contexts to be at the same indentation level as its enclosing context. | Legacy | Stable | Haskell98 | Haskell2010 | Documentation 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 | NPlusKPatterns | Enable support for n+k patterns. | Legacy | Stable | Haskell98 | |||||||||||||||||||||||||
82 | NullaryTypeClasses | Deprecated | Deprecated | Documentation claims "Deprecated, does nothing. nullary (no parameter) type classes are now enabled using MultiParamTypeClasses." but actually it does still enable nullary type classes. | ||||||||||||||||||||||||||
83 | NumDecimals | Enable support for 'fractional' integer literals. | Stable | Stable | GHC20XX? | |||||||||||||||||||||||||
84 | NumericUnderscores | Enable support for numeric underscores. | Stable | Stable | GHC2021 | |||||||||||||||||||||||||
85 | OrPatterns | Experimental | Stable | New | ||||||||||||||||||||||||||
86 | OverlappingInstances | Enable overlapping instances. | Deprecated | Deprecated | Use OVERLAP* pragmas instead | |||||||||||||||||||||||||
87 | OverloadedLabels | Enable overloaded labels. | Stable | Stable | ||||||||||||||||||||||||||
88 | OverloadedLists | Enable overloaded lists. | Stable | Stable | ||||||||||||||||||||||||||
89 | OverloadedRecordDot | Record '.' syntax | Stable | Stable | ||||||||||||||||||||||||||
90 | OverloadedRecordUpdate | Record '.' syntax record updates | Experimental | Stable | Change to Experimental after implementation of https://github.com/ghc-proposals/ghc-proposals/pull/583 | |||||||||||||||||||||||||
91 | OverloadedStrings | Enable overloaded string literals. | Stable | Stable | Can introduce ambiguities, and exposes users to unxpected instance behaviour (e.g. https://github.com/haskell/bytestring/issues/140) | |||||||||||||||||||||||||
92 | PackageImports | Enable package-qualified imports. | Deprecated | Deprecated | Blurs 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 | ParallelArrays | Deprecated | Deprecated | Undocumented. Presumably a leftover of DPH. Only effect is enabling ParallelListComp. Enabled by base. | ParallelListComp | |||||||||||||||||||||||||
94 | ParallelListComp | Enable parallel list comprehensions. | Stable | Stable | Probably nothing wrong with this, but not widely used or liked enough to include in GHC20xx? | |||||||||||||||||||||||||
95 | PartialTypeSignatures | Enable partial type signatures. | Stable | Stable | ||||||||||||||||||||||||||
96 | PatternGuards | Enable pattern guards. | Stable | Stable | Haskell98 | |||||||||||||||||||||||||
97 | PatternSignatures | Deprecated synonym for ScopedTypeVariables | Experimental/Deprecated? | Stable | Changes proposed (https://github.com/ghc-proposals/ghc-proposals/pull/608); mark as Deprecated then change to Experimental when those changes land? | ScopedTypeVariables | ||||||||||||||||||||||||
98 | PatternSynonyms | Enable pattern synonyms. | Stable | Stable | ||||||||||||||||||||||||||
99 | PolyKinds | Enable kind polymorphism. | Stable | Stable | GHC2021 | KindSignatures | ||||||||||||||||||||||||
100 | PolymorphicComponents | Deprecated | Deprecated | Undocumented, synonym for RankNTypes |