2022 State of Haskell Survey Results


I don’t really understand how MonoLocalBinds got 48 ‘no’ votes while GADTs (which implies MonoLocalBinds) only got 26 ‘no’ votes.

MonoLocalBinds is such a specific extension that I would expect everyone who votes against it to know about its connection to GADTs. Or are these people really advocating for using GADTs without MonoLocalBinds?

For those who are out of the loop, here’s a video from Richard Eisenberg about the reasoning behind MonoLocalBinds:

I feel like a many of the people who vote for GADTs but not MonoLocalBinds are blissfully unaware of these pitfalls of GADTs. Of course maybe many people just didn’t want to take the time to fill out all the options and just chose a few of the most notable extensions that they would like to see.

1 Like

Honestly, I’d say that there are a few extension I do undestand well: syntactic sugar ones (LambdaCase, MultiwayIf, …) and simple things like OverloadedXXXX, PatternSynonims, … Anything releated with the type system is kind of a mistery, If I ever use them is because the compiler says

Hey! you need to enable CreepyTypeLevelMorphisimSkolemWeAreTerribleAtNaming extension

Don’t get me wrong, I do have a shallow understanding of some of them but they are more of a “I want my code to compile” than “I want this typelevel feature which I actaully understand”-

Now, considering that 50% of the responses come from people with less than 5 years of experience, and 35%; less than 3 years. How many responsers do you think that actually understand all the MonoLocalBinds and GADTs quirks? (I don’t fully understand them by the way)

The whole extension jungle is a mess… and sorry for the small rant hahaha


Perhaps a significant number of people vote “no” for extensions they haven’t heard of or don’t understand (and hence assume should be disabled by default)? I think it is relatively likely that some people will know enough about GADTs to want them enabled by default, without understanding that MonoLocalBinds should come too.


Interesting bits in my opinion:

  • ghcup taking the crown;
  • comparing libraries, profiling and — emh — finding jobs still difficult;
  • less people using stack.

The question was what should be enabled by default - I read it as what should be there without me having to add it to .cabal or the .hs files header.
I certainly voted GADTs without MonoLocalBinds and the reason is simple: I use GADTs quite often but I cannot remember a single instance where I used MonoLocalBinds (without GADTs).

The “no” was not “I don’t want to enable that extension” - it was “I’m fine to add this if I ever need exactly this”


  • GHC upgrades breaking more of people’s code
  • GHCJS userbase dropped by almost 50%
  • 9.2.x getting more adoption, but still 41% on 8.10.x

LambdaCase was ranked top and finally got the place it deserves.
I still do not know how it happened that it did not enter GHC2021, that committee had a strange taste…

1 Like

I believe the \cases proposal is also implemented in the upcoming 9.6, so it will be even more useful.

1 Like