Very interesting discussion! From what I’ve read, folks are split mainly into two strategies:
- Finding a niche
- Expanding User base → Commercial base
I think finding a niche is a bad strategy. Having a niche for footing is a great thing, only if you can hold on to it. Lacking the manpower to man the guns means you’re doomed to loosing it.
I personally adhere to the expanding the user base, to then have it organically expand the commercial base. Whenever I get the chance of speaking to someone with any decision making power, I always dig in the same direction, and one-hundred-percent-of-the-time-no-misses-every-single-one-of-them has always told me the same:
a. They all recognize the strengths of Haskell.
b. They’re all trying to incorporate them into their workflows (fp-ts, https://effectful.js.org/, etc).
So why not cut the crap and use Haskell instead? It’s too difficult finding talent. That’s it.
So the question would be: why isn’t there more Haskellers? For me it’s easy: high entry price (I also really liked one response calling intermediate Haskell a wasteland).
Let me tell you a very short story.
Back when I was in college, mind this were the times when college taught pascal and C, I took a course on learning systems, back when LLMs hadn’t infected everyone’s minds. One of the assignments was writing an inference engine for an expert system, but with a twist: we had to write it using Erlang.
Er-who? Functional what? Where my first reactions. But in no time I already had something running. I remember thinking how much I liked the language, to even propose using it at the job, because in third world countries we work while studying, but I digress. I was working at a networks company that specialized in juniper networks, but had a couple of contracts with local telecoms. I was building the backend for their SMS routing system, in C++. I’m only telling you this because it’d seem to be the perfect use case for Erlang. Their response? That’s all very nice, but we can’t find people to work on that.
Now fast forward 10 years. Haskell comes across my way, and you’ll probably think that with that much experience under my belt, it was a breeze to learn. Wrong. Man did this language frustrated me. I had to relearn it like 3 times, because every time I thought I finally understood it, I quickly realized I didn’t.
So the real question is: how is it that a kid with little experience could build something really fast using a functional language he didn’t know, while that same older kid, with much more experience, struggled so much with another functional language?
For me the answer is simple: that same flexibility of doing things the way we want, that Haskell encourages and we all love, is also deeply hurting it. Don’t get me wrong, I think it’s a non negotiable and I love being able to mix and match and not having a beaten path, now that I understand the damn thing. But that’s it, as a newcomer, not having a beaten path to follow, is highly detrimental for the experience:
- Lazy or Strict?
- Containers? Vectors? Arrays? Strings? ByteStrings? Text? Boxed? Storable?
- Effects systems.
- You heard optics are cool? Here are 5 different libraries, choose one.
- Large etc we all know.
On the other hand, Erlang is very focused. Now that I think about it, Haskell feels a little like that genius kid, with ADHD robbing him his progress.
But well, what can we do about it? As much as the language lacks manpower, at the same time it has a lot of experts from whom I learn a lot every time I read what they post. I think it’ll be very beneficial if they could come together and build an “expert system” that would set up projects for newcomers by asking them simple questions. For instance: I’m building a web server → Do you prefer simplicity or type safety? → Are you using a database? → What engine? → Do you want an ORM, or just a query builder? → etc etc etc. After they’ve answered all that a project is set up with sensible defaults and no monad, effect, category theory shenanigans. Just a project that already runs using what the user asked for and with simple example functions they can build on.
Additional thoughts:
- On Small companies
I’ve read in some comments before mine people making the case that Haskell is not well suited for small companies. I think it’s the complete opposite. I think it’s where Haskell can shine and make a substantial difference.
Why? From experience, any language is god for any task, if you had infinite resources and time to polish it. Nothing works better than a well polished C program. But that’s it, small businesses have very limited resources. What’s better than a language that gives you a lot of certainties, that claims to work if compiles, that can check edge cases for you with property testing, when operating under resource constraints? That means less polishing time, less resource requirements.
- On the marketing issue:
I agree. If Haskell is marketed as advanced, meaning you must have years of experience on something else to begin with, then keep in mind folks with that much experience in that something else are probably proficient with it, and wouldn’t be inclined on sacrificing that muscle memory.