2019 State of Haskell Survey results
The third annual State of Haskell Survey closed a couple days ago. This post will analyze the results, graph them, and compare them to previous years (2018, 2017). I will not attempt to summarize the answers to free-response questions. I encourage any interested parties to download the raw results, do their own analysis, and share their results.
You can download the anonymized responses in CSV or JSON formats. Both are licensed under the ODbL 1.0 license.
- What is your email address?
-
Haskell usage
- Do you use Haskell?
- If you stopped using Haskell, how long did you use it before you stopped?
- If you do not use Haskell, why not?
- How long have you been using Haskell?
- How frequently do you use Haskell?
- How would you rate your proficiency in Haskell?
- Where do you use Haskell?
- Do you use Haskell at work?
- If you do not use Haskell at work, why not?
- Which programming languages other than Haskell are you fluent in?
- Which types of software do you develop with Haskell?
- Which industries do you use Haskell in?
- Projects
-
Compilers
- Which Haskell compilers do you use?
- Which installation methods do you use for your Haskell compiler?
- Has upgrading your Haskell compiler broken your code in the last year?
- How has upgrading your Haskell compiler broken your code in the last year?
- Which versions of GHC do you use?
- Which language extensions would you like to be enabled by default?
- How important do you feel it would be to have a new version of the Haskell language standard?
- Tooling
- Infrastructure
- Community
-
Feelings
- I would prefer to use Haskell for my next new project.
- I would recommend using Haskell to others.
- Once my Haskell program compiles, it generally does what I intended.
- I am satisfied with Haskell's compilers, such as GHC.
- I am satisfied with Haskell as a language.
- I think that software written in Haskell is easy to maintain.
- Haskell's performance meets my needs.
- I feel welcome in the Haskell community.
- I am satisfied with Haskell's package repositories, such as Hackage.
- I think Haskell libraries are high quality.
- I think that Haskell libraries perform well.
- Haskell is working well for my team.
- I can find Haskell libraries for the things that I need.
- I am satisfied with Haskell's build tools, such as Cabal.
- I think that Haskell libraries work well together.
- I think that Haskell libraries provide a stable API.
- I have a good understanding of Haskell best practices.
- I think that Haskell libraries are easy to use.
- Haskell is critical to my company's success.
- As a hiring manager, I can easily find qualified Haskell candidates.
- I think Haskell libraries are well documented.
- I can easily reason about the performance of my Haskell code.
- I can easily compare competing Haskell libraries to select the best one.
- As a candidate, I can easily find Haskell jobs.
-
Demographics
- Which country do you live in?
- How old are you?
- What is your gender?
- Do you identify as transgender?
- Are you a student?
- What is the highest level of education you have completed?
- What is your employment status?
- How large is the company you work for?
- How many years have you been coding?
- How many years have you been coding professionally?
- Do you code as a hobby?
- Have you contributed to any open source projects?
- Meta
- Free response
What is your email address?
Email addresses were collected but aren’t included in the results. This year I decided to make email addresses required as a way to counteract the bogus submissions I got last year. As far as I can tell all of this year’s submissions were legitimate. However I received fewer submissions this year compared to previous years. This year I received 1,211 submissions. Last year (2018) I received 1,361. The year before (2017) I received 1,335.
Haskell usage
Do you use Haskell?
Single select.
As expected, most people filling out the survey are Haskell users. This is consistent with previous years.
If you stopped using Haskell, how long did you use it before you stopped?
Single select.
Most people who stopped using Haskell used it for more than a year. In both previous surveys most people had used Haskell for less than a year. What changed? Why are people using Haskell for longer before stopping? It’s hard to say based only on the survey data.
If you do not use Haskell, why not?
Multiple select.
Haskell the language comes across looking pretty good here. Most of the complaints are about the ecosystem, including documentation, packages, and tools. This is consistent with previous years, where documentation is a frequent complaint. Notably many people that do use Haskell aren’t thrilled with the documentation either.
How long have you been using Haskell?
Single select.
Similar to last year there’s a peak around the two year mark. Also there’s a large number of people that have used Haskell for a long time. I thought that having seven discrete year buckets would be plenty, but it looks like I’ll need even more for next year’s survey!
How frequently do you use Haskell?
Single select.
Most people that use Haskell use it daily. This is consistent with previous years. To mean that suggests that it’s a good choice for a wide variety of tasks, otherwise people may only sometimes reach for it. That matches my own personal experience as well.
How would you rate your proficiency in Haskell?
Single select.
Haskell has a high skill ceiling, and most users consider themselves intermediate users. It seems like there’s always something more to know, but you don’t need to know much in order to get things done. This matches previous years.
I think a common complaint from the Haskell community is that there’s a lot of content for beginners and experts, but not much in between. That’s especially frustrating since so much of the community is in that intermediate level of proficiency.
Where do you use Haskell?
Multiple select.
This is remarkably consistent with previous years. Plenty of people use Haskell at home, but it’s not breaking into the workplace. It’s hard to analyze this question more on its own. Other questions in the survey, like the next two, give more insight.
Do you use Haskell at work?
Single select.
More people use Haskell at work than don’t, which is great. This is similar to previous years, but this year I asked about wanting to use Haskell if you’re not already. Most people that aren’t using Haskell at work want to be. So what’s stopping them? The next question sheds some light on that.
If you do not use Haskell at work, why not?
Multiple select.
Most people don’t use Haskell at work simply because it’s not one of the blessed languages. And it’s not one of the blessed languages because it’s hard to hire Haskell developers. Seems like a bit of a catch-22. Regardless this is similar to previous years, and also similar to the “If you do not use Haskell, why not?” question. Haskell’s documentation, package ecosystem, and tooling all need to level up in order to be viable to use at work.
Which programming languages other than Haskell are you fluent in?
Multiple select.
Once again the clear front runners are Python, JavaScript, C, Java, Shell, and C++. I’m not sure what conclusions can be drawn from this, other than those are popular languages and they remain popular even with Haskell users. Perhaps these results suggest that the Haskell community could see what those other language communities are doing well and try to copy them. Also we could try to produce content that shows how to take something from, say, Python and translate it into Haskell.
Which types of software do you develop with Haskell?
Multiple select.
CLI programs and API services are even more popular this year than last, but the overall distribution is pretty similar. For people trying to use Haskell at work, introducing a CLI or API program is probably the way to go. Their popularity in the Haskell community means that they’re likely to have the best packages available and good documentation. Usually there are a wide range of approaches too, like optparse-applicative versus optparse-generic, or scotty versus servant-server.
Which industries do you use Haskell in?
Multiple select.
Web continues to dominate, with finance and education more or less tied in second. There’s a long tail of things grouped into “Other”. The most popular are cryptocurrencies, academia/research/science, and security. I will be sure to split out those industries next year.
Projects
How many Haskell projects do you contribute to?
Single select.
Many people do not contribute to any Haskell projects. Almost half of people contribute to between one and three projects. This is similar to last year.
What is the total size of all the Haskell projects you contribute to?
Single select.
The “Less than 1,000 lines of code” bucket saw an increase compared to previous years. Not many people are working on very large projects. Taken with the previous question, it seems like most people are working on a few small projects. This is perhaps a consequence of most people not using Haskell at work, since personal projects take time to maintain and typically don’t grow that large.
Which platforms do you develop Haskell on?
Multiple select.
This distribution looks basically identical to previous years. My takeaway from this is that Haskell developer tools would do well to focus on Linux first, before adding support for MacOS and Windows.
Which platforms do you target?
Multiple select.
This also looks exactly like it did in previous years. Linux is far and away the most popular deployment target. Again my takeaway is for runtime tools like debuggers or profilers to focus on Linux first before supporting MacOS and Windows.
Compilers
Which Haskell compilers do you use?
Multiple select.
Unsurprisingly GHC is far and away the most popular Haskell compiler. GHCJS is holding steady. Eta is less popular than last year.
Which installation methods do you use for your Haskell compiler?
Multiple select.
Both Nix and ghcup are more popular than previous years. Everything else stayed more or less the same.
Has upgrading your Haskell compiler broken your code in the last year?
Single select.
This bounced back from last year with 54% “No”, but it still hasn’t returned to 2017’s peak of 84% “No”. It’s disappointing that nearly one-third of Haskell users had their code broken by a compiler upgrade in the past year. The next question goes into more detail.
How has upgrading your Haskell compiler broken your code in the last year?
Multiple select.
This is similar to last year, except that the “New warnings” choice almost doubled.
Some new warnings were introduced this year that effectively fired on all code, like -Wmissing-deriving-strategies
, so that probably had something to do with it.
The “Expected changes” and “Incompatible dependencies” choices are intertwined because it takes time for dependencies to upgrade in response to expected changes.
This year saw the move to the MonadFail
type class for the fail
method, which ended up breaking a lot of code that needed to be fixed.
Personally, while I’m in favor of moving fail
out of the Monad
type class, it had a very real cost in terms of time spent patching old dependencies.
Which versions of GHC do you use?
Multiple select.
Although the version numbers obviously change, the distribution remains remarkably consistent.
The three most recent major versions (8.8, 8.6, 8.4) cover the vast majority of users.
I’ve said this before and I’ll say it again:
Don’t spend too much time maintaining support for older versions of GHC.
Especially if it lets you simplify your package description by removing conditionals or simplify your code by removing CPP
.
Which language extensions would you like to be enabled by default?
Multiple select.
This is everyone’s favorite question.
As you can see, there’s a long tail of extensions that people would like to be enabled by default.
I only included things above that got at least 10% of the vote.
OverloadedStrings
is always the most popular, but it actually got more popular this year.
LambdaCase
continues to hang out in second place, followed by some extensions related to deriving and GADTs
.
My read of this is that people want some quality of life improvements without having to manually enable them, either in their Cabal file or in every source file.
How important do you feel it would be to have a new version of the Haskell language standard?
Single select.
This is consistent with last year. People want a new version of the Haskell language standard (perhaps to enable some of those extensions?) but it’s not a showstopper.
Tooling
Which build tools do you use for Haskell?
Multiple select.
Nix gained some ground, but otherwise this looks about the same as previous years. Stack continues to be the most popular build tool for Haskell.
Which editors do you use for Haskell?
Multiple select.
I feel like there are two main “camps” here: The terminal-based editor users and the graphical ones. Vi and Emacs remain as popular as ever. However VSCode continues to get more popular year over year. Notably Atom continues to drop in popularity, so perhaps Atom users are abandoning it for VSCode. If things keep going at this rate, VSCode is going to overtake Vi/Emacs next year. Popular “Other” choices include various Vi-family editors like Neovim, various Emacs-family editors like Spacemacs, and Kakoune.
Which version control systems do you use for Haskell?
Multiple select.
Exactly the same as previous years. Everyone uses Git. Hardly anybody uses anything else.
Where do you get Haskell packages from?
Multiple select.
This is similar to previous years, except that Nix is more popular than it was before. Seems like Nix is gaining ground in a lot of different places.
Which tools do you use to test Haskell code?
Multiple select.
This is more or less the same as last year, except that both HUnit and Hedgehog are more popular. I’m still surprised that property-based testing with QuickCheck is more popular than typical unit testing libraries like Hspec and HUnit. I’m happy about it, though! Property-based tests are wonderful, in my opinion.
Which tools do you use to benchmark Haskell code?
Multiple select.
This is the same as last year. Criterion is the most popular tool for benchmarking Haskell code.
Infrastructure
Which tools do you use to deploy Haskell applications?
Multiple select.
This looks pretty much the same as last year. I’m a little confused about the popularity of static binaries, since producing static Haskell executables with libraries like glibc and libpq is challening. Perhaps people are deploying mostly static binaries. Regardless, Nix is more popular this year than last, and Docker remains a popular alternative to binaries.
Where do you deploy Haskell applications?
Multiple select.
This is about the same as last year. Both Google’s and Microsoft’s clouds are little more popular. That being said, the most popular options by a long shot are self-owned infrastructure or AWS.
Community
Where do you interact with the Haskell community?
Multiple select.
Yet another one that’s basically the same as the previous years. This is the first year that Slack overtook IRC though.
Which of the following Haskell topics would you like to see more written about?
Multiple select.
The top six choices are exactly the same as last year. Haskell users would like to see more written about best practices, design patterns, application architectures, library walkthroughs, performance analysis, and tooling choices. I think this year has seen improvement in these intermediate-level topics, thanks in no small part to Type Classes, but clearly there’s room for more. For those of you that are using Haskell at work, I’ll bet the community would appreciate you writing about some of the choices you’ve made along the way.
Feelings
Up until this point I have been keeping the order of the questions the same as they were in the survey. For this section I will instead sort them from best to worst. Since each question has the same answer choices, a score can be given to each question by assigning a number value to each choice and averaging them. “Strongly agree” is worth 5 points, “Agree” 4, “Neutral” 3, “Disagree” 2, and “Strongly disagree” 1.
I would prefer to use Haskell for my next new project.
Single select. Average: 4.45
Similar to last year, most people would prefer to use Haskell for their next project.
I would recommend using Haskell to others.
Single select. Average: 4.32
Also similar to last year, most people would recommend Haskell to others.
Once my Haskell program compiles, it generally does what I intended.
Single select. Average: 4.19
This is a bit of a meme about Haskell. Compared to last year people actually agree with this more. So perhaps there’s some truth to this meme.
I am satisfied with Haskell's compilers, such as GHC.
Single select. Average: 4.18
Just like last year, people like their Haskell compiler, which is overwhelming GHC.
I am satisfied with Haskell as a language.
Single select. Average: 4.18
This is more or less the same as the past two years. People like Haskell as a language.
I think that software written in Haskell is easy to maintain.
Single select. Average: 4.17
This is similar to last year, but not as many people feel strongly about it.
For me personally this is the most compelling reason to use Haskell, but I can see how the changes in GHC 8.8 (namely MonadFail
and deriving strategies) could make it a harder sell in the short term due to churn.
Haskell's performance meets my needs.
Single select. Average: 4.05
This has improved a little bit since last year. Haskell is generally fast enough to meet people’s needs.
I feel welcome in the Haskell community.
Single select. Average: 4.02
This is basically the same as last year. The Haskell community is a place where most everyone feels welcome.
I am satisfied with Haskell's package repositories, such as Hackage.
Single select. Average: 3.85
Similar to the past two years, people generally like Haskell’s package repositories, but they don’t feel too strongly about it.
I think Haskell libraries are high quality.
Single select. Average: 3.82
At this point we start getting into the questions where more people feel neutral than strongly agree, even though overall the sentiment is still positive. The answers to this question have stayed remarkably consistent year after year. Haskell libraries are high quality, but they’re not blowing people away with how great they are.
I think that Haskell libraries perform well.
Single select. Average: 3.74
This looks about the same as last year. Haskell libraries perform well, but not as well as Haskell itself. To mean that means there’s some room for improvement, but without more specific data it’s hard to come up with an actionable takeaway.
Haskell is working well for my team.
Single select. Average: 3.71
I can find Haskell libraries for the things that I need.
Single select. Average: 3.58
This is a little worse than the past two years. That makes sense to me, since the lack of critical libraries is one of the main reasons why people aren’t using Haskell at work.
I am satisfied with Haskell's build tools, such as Cabal.
Single select. Average: 3.49
This has improved a little over the previous years.
It could be that people are switching over to Nix and enjoying that.
Or it could be that people are enjoying the recent improvements to cabal-install
.
Or maybe people are simply getting more comfortable with their existing workflows.
I think that Haskell libraries work well together.
Single select. Average: 3.44
This hasn’t changed much compared to previous years. I’d be curious to drill down into this one to see how Haskell libraries could work better together. Is it a symptom of libraries that define data types also having to define type class instances? Or is it related to libraries in the same domain not sharing a core set of data types? I don’t have enough information to say.
I think that Haskell libraries provide a stable API.
Single select. Average: 3.44
This is the same as the past two years.
Personally, I feel like most libraries are very stable, but there have been some high-profile instability in the past year, like network
version 3.
I have a good understanding of Haskell best practices.
Single select. Average: 3.20
Here’s where a significant number of people start disagreeing. For this question, the results look similar to last year. Some people moved from “Disagree” to “Neutral”, so maybe we’re making some progress on this front. Regardless, most Haskell users don’t feel like they have a good understanding of best practices.
I think that Haskell libraries are easy to use.
Single select. Average: 3.11
This looks the same as previous years. If I had to guess, I’d say that the lack of good documentation is what makes Haskell libraries hard to use. Or at least better documentation could make libraries easier to use.
Haskell is critical to my company's success.
Single select. Average: 3.08
This distribution is similar to last year. I’m a little confused by the results though. When I wrote the question, I had assumed that strongly disagreeing with this would mean that Haskell is actively harmful to your company’s success. I think that’s not how people interpreted this question. Next year I will try to make this clearer.
As a hiring manager, I can easily find qualified Haskell candidates.
Single select. Average: 2.91
This is actually looking better than last year. I think many people answered “Neutral” because they aren’t a hiring manager, which kind of skews the results. Regardless, things are looking up! It’s slightly easier this year to hire Haskell developers than last year.
I think Haskell libraries are well documented.
Single select. Average: 2.86
Here’s where we get into the questions where more people disagree than agree. Broadly speaking this one looks the same as the last two years, but there has been a slight improvement. This is frustrating to see because Haskell has a reputation for not having great documentation, but not much improvement is being made in the area. I wonder if there’s a way for us as a community to encourage people to write documentation?
I can easily reason about the performance of my Haskell code.
Single select. Average: 2.75
Another evergreen Haskell problem with not much movement over the years. Haskell’s laziness by default means that any performance reasoning you’ve got from other languages probably doesn’t apply, since those languages are most likely strict. However I think it’s important to note that in general people are happy with the performance of their Haskell programs, even if they may not easily be able to reason about it.
I can easily compare competing Haskell libraries to select the best one.
Single select. Average: 2.69
This has improved a little, but it’s still a sore spot. It’s hard to select between competing Haskell libraries, if you’re even aware of the alternatives in the first place. I’m encouraged by some new libraries explicitly comparing themselves to their competitors, but that doesn’t seem like something that every library is going to do.
As a candidate, I can easily find Haskell jobs.
Single select. Average: 2.48
And finally here we have the prompt that Haskell users feel the worst about: Being able to find a job using Haskell. I would love to be able to break this down even further. My guess is that this is primarily influenced by two things: A general lack of Haskell jobs, and the Haskell jobs that are available requiring a high level of expertise. There aren’t many entry-level Haskell jobs available.
Demographics
Which country do you live in?
Single select.
How old are you?
Single select.
What is your gender?
Single select.
Do you identify as transgender?
Single select.
Are you a student?
Single select.
What is the highest level of education you have completed?
Single select.
What is your employment status?
Single select.
How large is the company you work for?
Single select.
How many years have you been coding?
Single select.
How many years have you been coding professionally?
Single select.
Do you code as a hobby?
Single select.
Have you contributed to any open source projects?
Single select.
Meta
Did you take any previous surveys?
Multiple select.
How did you hear about this survey?
Single select.
Free response
If you wanted to convince someone to use Haskell, what would you say?
Optional. Free responses were collected but not analyzed.
If you could change one thing about Haskell, what would it be?
Optional. Free responses were collected but not analyzed.