I did my best to go through the thread, to avoid re-iterating points that were already stated.
One of the most important points that was raised, in my opinion, is that there’s no way to focus resources on any particular area of programming. Who would make that happen? If some companies in a certain sector find Haskell a good fit for their purposes, then the foundation could pave the way for them, and remove obstacles, but that’s about it.
What the foundation could do on its own, is to lead by example. I believe that part of the success of Go is because the language, and the standard library, set a tone, so to speak. And libraries generally emulate that tone. And that makes onboarding pretty easy. Not just onboarding newcomers to the language, but also onboarding experienced developers onto new libraries.
For example, every Go package is documented on https://pkg.go.dev/. I know where to click, what to expect, and so on. The standard library sets the bar pretty high by supplying lots of examples that you can just copy paste into a playground, or into your code.
Then there’s also the code style. The idea behind abstractions like io.Reader
, the absence of functional programming constructs like mapping and folding, and so on. Please note that I’m not saying that this particular style should be emulated by Haskell (obviously), but that leading by example can go a long way towards creating an ecosystem where most things are somewhat familiar and therefore easy.
I think Haskell has already improved in these areas. For example, I love the Haskell playground and use it a lot to prototype, or just check out examples. It also seems to me that more core packages come with examples. But there are also lots and lots of under documented examples and the documentation overall could be easier to navigate. I’m a huge proponent of standardized documentation (something that Javascript for example lacks) and since the foundation (I assume) kind of “owns” hackage, they’re also in a position to influence things here.
The other aspect is uniformity and familiarity. Everyone uses a different set of extensions, custom prelude, this or that library for the same purpose. I’m not sure how to best address this, but if the foundation, through the code it owns, would show average programmers like me how things should be done, that would greatly help me.
The same goes for formatting, linting, and generally tooling. If Haskell had an official formatter, it would also serve as a demonstration of how to write a CLI tool in Haskell. It could show people whether Haskell is a community that prioritizes customization, by offering lots of formatting options, or one that favors simplicity (think go fmt
). Again, not saying one is better than the other.
Error messages also fall under this umbrella. Is Haskell a language/ecosystem where having understandable error messages is important? If I see obscure errors from the compiler and core libraries every day, then I’ll likely just do the same in my own code. This follows the idea of writing code that looks like the surrounding code.
Summary: I believe that the best lever the foundation has is to use the part of the ecosystem it owns to set an example for what modern Haskell should look and feel like.
I fully admit that there are plenty of languages that succeed without that. I mean look at Javascript. I’ve been writing JS on and off for over 7 years, and it seems to just get wilder and messier every year. But it still hasn’t collapsed under its own weight. Not sure what to make of that.