Thanks for this nice summary, and thanks for your eight years of contributions to Haskell. This part was my favourite:
Using Haskell tooling is like always being in the quantum superposition of “How do you even use other PLs without such wholesome Haskell tools???” and “How Haskellers can live like that without these usability essentials???”.
I find it hard to reconcile how excellent I believe our language is with the existence of so much flakiness and so many sharp edges in our ecosystem. The situation is improving though!
Regarding batteries included,
I’m a big proponent of the idea that a standard library should be batteries-included.
I’m sympathetic to the “batteries included” view of standard libraries, but it has its downsides too. For example, one reason that ByteString
is not one of the batteries that’s included with base
is because historically String
was chosen to the battery fulfilling that role, and now it’s very hard to displace.
Regarding error messages, I take your point that “this is just one example (and most likely not the best one)” so here’s an attempt at an example that is fairer, because it doesn’t involve typeclasses or overloading of operators and numeric literals (that OCaml doesn’t support anyway). OCaml’s message is still better though.
ghci> True && [False, False, True]
<interactive>:1:9: error:
• Couldn't match expected type ‘Bool’ with actual type ‘[Bool]’
• In the second argument of ‘(&&)’, namely ‘[False, False, True]’
In the expression: True && [False, False, True]
In an equation for ‘it’: it = True && [False, False, True]