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

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.
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.

4 Likes

Link please?

2 Likes

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.

1 Like