So what should we then do with all the comments that Haskell should have been strict by default? Here’s one option - have the authors of those comments read More points for lazy evaluation:
-
(But lazy lists were included in SWI Prolog as an option for streaming in 2019.)
There is no “free lunch” to be had from being strict by default - it has its own costs.
But if they’re still not convinced, here’s some more direct evidence to the contrary:
-
Discus - http://discus-lang.org (formerly known as Disciple)
- abandoned.
-
Amy - GitHub - jdreaver/amy: Strict Haskell-like programming language that compiles to LLVM
- no repository activity for about seven years now.
-
Hamler - https://www.hamler-lang.org
- no repository activity for about four years now.
A search for "strict Haskell"
does find this concise presentation by Alexis King:
Laziness in Haskell – Part 2: Why not Strict Haskell?
…but surely that and similar content alone cannot be the reason why no strict dialect of Haskell has ever seriously challenged Haskell since 1990 - if even one in one hundred people dissatisfied with Haskell’s non-strict semantics over the last thirty years wrote a line of code for such a dialect, it would now exist (possibly instead of Rust).
Then there’s Mu:
…whose front section is apparently now being replaced with GHC (no, I don’t know the specific details). For ease of interoperability, it seems SC has chosen to keep Mu’s syntax as close as possible to that of Haskell - also quoting from the reference in ReleaseCandidate’s post here:
So is this - finally - the sought-after evidence that Haskell being non-strict was…a mistake? And Haskell’s designers really should have made “the pragmatic decision” instead (strict/sequential semantics)?
Hmm - “pragmatism” ; I recall commenting on that in another “long and winding” topic…there it is:
…and back in 1987, there already was a functional language with not just strict, but sequential semantics (due to the “pragmatic” choice of using effects directly). So what would have been the point of introducing another functional language with similar (strict but pure) semantics? It’s in large part due to Haskell having non-strict semantics that the benefits of purity can now be proclaimed with such certainty for all to hear (and read).
But as I’ve also commented elsewhere:
Therefore all comments about Haskell’s non-strict semantics being the wrong choice in 1987 and since that time can be ignored.