It has a lot of excellent ideas and devilishly clever abstractions, but in Haskell they tend to remain incomplete and awkward to use. They tend to only mature by translation to other languages.
It has a lot of excellent ideas and devilishly clever abstractions, but in Haskell they tend to remain incomplete and awkward to use. They tend to only mature by translation to other languages.
For some simple examples see https://github.com/stefan-hoeck/idris2-tutorial
Oops, your advice came ten years and millions of dollars of value generated too late for me :(
All jokes aside, it isn't impossible to use Haskell for a commercial project, but in my opinion you are making things needlessly difficult for yourself - especially in the pre-AI era. There's only a certain hours in a week, so do you want to spend those writing business logic, or building libraries to make up for the gaps in the ecosystem?
Take Ruby, for example. It is by most metrics not exactly a great language, and I reckon there are very few applications where the language itself is the best option. But take Ruby on Rails and you've suddenly got an opinionated batteries-included web app stack, where you can spend 99% of your time writing only the business logic that matters. No need to spend days fighting with Servant to get its not-quite-there-yet typed DSL to let you write basic CRUD, you can just focus on your MVP.
Want to send some email? You can either write your own Haskell integration of their REST API - orrr use their first-party C# SDK. Rinse and repeat for a dozen dependencies.
And all of that is before it turns out that some of your developers aren't the 20x rockstars you thought they were, and some of their clever high-level abstractions are horribly broken and doing more harm than good...
Haskell for me is "the one that got away". I really like the core language and I really want to use it for absolutely everything, but the ecosystem and culture around it just make that impossible.
Is most of the "business" within the inner logic, and you've got a complicated internal logical process you want to keep safe and solid? Haskell shines.
Do you have a fairly (internally) simple app that does a lot of reaching in and out to the messy outside world? Haskell might not be the most pleasant experience, to put it lightly.
This is due to how it easily lends itself to transforming unstructured inputs into structured outputs, and also because of its amazing asynchronous programming model.
To make a serious rejoinder to a light-hearted comment, I couldn't have, because without Haskell I would have been so annoyed with programming I would have gone into management or something, so that I didn't have to use a "more programmer-friendly" language and want to tear my eyeballs out 8 to 10 hours a day. Seriously. Haskell is the only language I've used which I don't feel gets in my way.