2019 State of Haskell Survey results

24 min read Original article ↗

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?

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.

10%

117

My company doesn't use Haskell

4%

47

Haskell's documentation is not good enough

4%

48

Haskell lacks critical libraries

3%

41

Haskell lacks critical tools

3%

39

Haskell is too hard to learn

2%

22

Haskell's performance is not good enough

2%

23

Haskell does not support the platforms I need

1%

14

Haskell lacks critical features

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.

14%

167

1 month to 1 year

14%

174

1 year to 2 years

15%

185

2 years to 3 years

12%

140

3 years to 4 years

9%

103

4 years to 5 years

19%

227

More than 7 years

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.

30%

363

Yes, most of the time

22%

261

Yes, some of the time

1%

17

No, but my company does

41%

492

No, but I'd like to

3%

34

No, and I don't want to

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.

33%

398

My company doesn't use Haskell

9%

105

It's too hard to hire Haskell developers

8%

91

Haskell lacks critical libraries

6%

77

Haskell is too hard to learn

6%

72

Haskell lacks critical tools

5%

62

Haskell's documentation is not good enough

3%

40

Haskell does not support the platforms I need

2%

29

Haskell's performance is not good enough

2%

20

Haskell lacks critical features

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.

63%

758

Command-line programs (CLI)

47%

572

API services (returning non-HTML)

38%

463

Libraries or frameworks

35%

425

Automation or scripts

33%

400

Web services (returning HTML)

20%

248

Agents or daemons

10%

123

Desktop programs (GUI)

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.

16%

196

Banking or finance

9%

113

Commerce or retail

5%

57

Healthcare or medical

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.

26%

311

Less than 1,000 lines of code

26%

312

Between 1,000 and 9,999 lines of code

22%

265

Between 10,000 and 99,999 lines of code

11%

133

More than 100,000 lines of code

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.

16%

199

Operating system package

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.

19%

233

Expected changes, such as the MonadFail proposal

19%

230

Incompatible dependencies

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.

48%

578

OverloadedStrings

26%

312

FlexibleInstances

25%

302

ScopedTypeVariables

23%

273

GeneralizedNewtypeDeriving

21%

250

DeriveTraversable

19%

227

MultiParamTypeClasses

15%

178

DerivingStrategies

15%

176

DeriveDataTypeable

14%

164

StandaloneDeriving

12%

141

FunctionalDependencies

10%

120

NumericUnderscores

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.

12%

148

Extremely important

36%

442

Moderately important

13%

156

Slightly important

8%

95

Not at all important

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.

30%

367

Visual Studio Code

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.

4%

44

Haskell Test Framework

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.

43%

524

Self or company owned servers

26%

311

Amazon Web Services

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.

21%

250

Conferences (commercial)

15%

185

Conferences (academic)

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.

42%

504

Application architectures

34%

417

Library walkthroughs

34%

413

Performance analysis

31%

377

Production infrastructure

28%

343

Debugging how-tos

24%

285

Project maintenance

22%

267

Algorithm implementations

19%

230

Beginner fundamentals

14%

164

Mobile development

10%

126

Comparisons to other languages

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

12%

150

Strongly disagree

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

12%

143

Strongly disagree

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

18%

219

Strongly disagree

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.

16%

195

18 to 24 years old

46%

552

25 to 34 years old

24%

292

35 to 44 years old

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.

1%

11

Less than high school diploma

7%

87

High school diploma

35%

424

Bachelor's degree

2%

23

Professional degree

What is your employment status?

Single select.

72%

867

Employed full time

6%

70

Not employed, but looking for work

3%

39

Not employed, and not looking for work

How large is the company you work for?

Single select.

13%

163

Fewer than 10 employees

32%

390

10 to 99 employees

16%

196

100 to 999 employees

23%

275

More than 1,000 employees

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.