The first thing is that as _a_ language, Haskell (more specifically GHC), for me is just a generally better than everything I've used so far, especially the more mainstream languages. It's not perfect, I have lots of gripes with it. But I have so little frustration writing haskell compared to the rest (especially stuff like C++ and C#). Every time I use another language I'm getting frustrated by thousands of pitfalls and special cases everywhere, or the famous "in haskell this is just". I wish every language would be designed in such a principled way and not cripple itself on purpose (elm, go, etc.).
Typeclasses for example, they're such a good feature imo, I absolutely hated that in Ocaml wherever we wanted the same thing with modules, we'd have to pass everything explicitly.
If you're into FP, I don't have to sell the merits of immutability. Now, there's a price you pay for immutability, so most other FP languages decided to just not pay that price by also not enforcing the immutability. Haskell took the road of purity, and from that choice naturally arises laziness (strictness is opt-in). Laziness is our best weapon to get back this huge asymptotic complexity we paid.
Then, a lot of people complain about the laziness by default. Part of it is certainly lack of experience, with time they'll reason about it more instinctively as well as exploit it better to their advantage. But more importantly, they don't realize that opt-in laziness, in practice, will never work how they claim it will: we'd just use it here and there, otherwise nearly every API would need a lazy version (if we want opt-in laziness _everywhere_).
The other big thing in haskell is types. I believe this is where haskell suffers the most. Mind you, its
type system is still eons ahead of most other languages. It's just that once you enter type-level land, everything becomes very clunky. Clearly, haskell was never designed to do dependent typing, yet that's what we're trying to reach. I Believe static typing isn't even a debate anymore in the FP community; types and FP kinda became synonymous, and when you look at how many talks are solely about types at ICFP for example, it's hard to deny it. There are so many things we could use types for, so much room for improvements, and Haskell being both popular and bleeding-edge (at the very least friendly towards research and experiments, see linear-haskell, liquid haskell, the 8.0 changes, etc.) it'll stay the language of c
Post too long. Click here to view the full text.