# Categorize why a GHC language extension is not "Stable"?

**URL:** <https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651>\
**Category:** Learn\
**Created:** [August 5, 2025, 2:41pm UTC](https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651 "2025-08-05T14:41:11Z")\
**Posts on this page:** 4\
**Page:** 1

<div class="post-metadata">

**Author:** ![VitWW](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/vitww/32/4184_2.png) [@VitWW](https://discourse.haskell.org/u/VitWW)\
**Post date:** [August 5, 2025, 2:41pm UTC](https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651/1 "2025-08-05T14:41:11Z")

</div>

Right now Haskell Devs put a lot of efforts to categorize GHC extensions.

- [Language extensions will be classified into the following categories](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0601-extension-lifecycle-framework.md) accepted Proposal
- ~~[Add categorization of language extensions](https://github.com/ghc-proposals/ghc-proposals/pull/669) pull request to almost accepted (but still in “Pending committee review” stage) proposal~~
- UPD: [Add categorization of language extensions](https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0669-extension-categorization.md) accepted Proposal

Some of extensions are “Stable” and it is recommended to use them in code.  
But the rest of them are marked as “Experimental“, “Deprecated“ and even “Legacy“.  
“Deprecated“ and “Legacy“ are not recommended to use, “Experimental” ones you could use , understanding all risks.

But …. **why** the extension is not recommended and **what** risks have some extensions?

I think, most of Haskell users (and some Devs) don’t know why or don’t remember why.

And this is bad for uses, because they can’t comprehend which risk they have in their code.  
And this is bad for Devs too. Because they forget time to time what they try to resolve, and no longer even try write new solutions to old problems.

I recommend to add additional categorizations, **WHY** the extension is not “Stable”. This benefits both Devs and users.

This topic tries to collect all “whys” with “proofs” (pieces of code with explanations).

## Please post here what you remember!!!

Some answers could be:

- **Fresh / LongLived** - is an extension is Fresh (like `MultilineStrings`)
- **Shifts / Fixed** - is an extension frequently changes (like `TemplateHaskell`)
- **NonSafe / Correct** - is an extension allow to write wrong code (like `OverlappingInstances`)
- **NonFinished / Total** - does an extension cover all cases or not (like `Arrows`)
- **Narrow Specialized / UniversalUse** - is an extension is narrow specialized (like `TransformListComp`)
- **Ineffective / Effective** - is an extension use effective ways to compute (like `ApplicativeDo`)
- **SubSetOfCases / SetOfCases** - is an extension covers just a subset of cases (like `Rank2Types`)
- **AntiPattern / GoodUse** - is an extension use anti-pattern (which makes coding harder) (like `DatatypeContexts`)
- … maybe some other

If we collect enough evidence **WHY** the extension is not “Stable”, I’ll add all of them in one Proposal for additional categorization.

---

<div class="post-metadata">

**Author:** ![rhendric](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/rhendric/32/2689_2.png) [@rhendric](https://discourse.haskell.org/u/rhendric)\
**Post date:** [August 5, 2025, 2:44pm UTC](https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651/2 "2025-08-05T14:44:11Z")

</div>

> [@VitWW](#):
>
> Right now Haskell Devs put a lot of efforts to categorize GHC extensions.
> 
> Some of extensions are “Stable” and it is recommended to use them in code

Link please?

---

<div class="post-metadata">

**Author:** ![VitWW](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/vitww/32/4184_2.png) [@VitWW](https://discourse.haskell.org/u/VitWW)\
**Post date:** [August 6, 2025, 5:27pm UTC](https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651/3 "2025-08-06T17:27:22Z")

</div>

Ok, I start first.

Extension `MultilineStrings` is a **Fresh** extension (accepted in Jan 2024, implemented in Aug 2024)  
Also extension `MultilineStrings` is a **Developing** extension (changed in Sep 2024, Jun 2025)

Extension `Rank2Types` in relation of `RankNTypes` is just a **NonGeneralized** extension. (just for rank 2 types, not for any high rank)

Extension `TransformListComp` is a **Narrow Specialized** extension. (comprehensions with SQL-like syntax).

For the rest extensions, I’ve categorized in the comment below - I have no “proofs”, just rumors why they are not Stable.

---

<div class="post-metadata">

**Author:** ![janus](https://sea2.discourse-cdn.com/flex002/user_avatar/discourse.haskell.org/janus/32/1060_2.png) [@janus](https://discourse.haskell.org/u/janus)\
**Post date:** [October 13, 2026, 12:38am UTC](https://discourse.haskell.org/t/categorize-why-a-ghc-language-extension-is-not-stable/12651/4 "2026-10-13T00:38:33Z")

</div>

I think AllowAmbiguousTypes is uncategorized because compiler authors disagree a lot about how to handle it:

- GHC: checks signatures for ambiguity by default; AllowAmbiguousTypes turns the check off, and `@Type` resolves each use.
- MicroHs: never checks signatures; `@Type` resolves each use.
- Hugs: always checks signatures, with no way to turn it off.
