If I see this, I expect that you’re doing something really, really clever and therefore have a well-written justification and a note from your parents.
Pretty funny :)
Having harshly criticized Haskell before, now I feel compelled to defend it a little.
See, every language has a feature that is terribly abused because it’s the cool, clever thing in the language: (…) monadic everything in Haskell
Every higher-order language with strict evaluation implicitly uses monadic style, including every object-oriented language. Why is monadic style particularly bad in Haskell? Monadic style does have shortcomings, chiefly among them, it doesn’t even attempt to make imperative programming more tractable. But, what it does (describe and delimit the existence of effects), it does very well.
My impression is the author said “monad” to mean “abstract nonsense” instead of “procedural program.” Though he’s right that people do write too many procedural programs in Haskell :).
If what he finds distasteful is too much abstraction, he could have said “overly abstract” or “unnecessarily abstract”.
By the way, I empathize with this feeling. Abstractions have to justify their presence on a benefit/cost basis, just like everything else. In particular, sophisticated abstractions have to justify their presence with sophisticated applications.
When I read a few Haskell books, circa 2008-2010, monads were all the rage. You had to have a Reader and a State in your program! Real World Haskell made the most sense.
I was thoroughly flummoxed by trying to write a program which makes an HTTP request and parses a JSON response. In retrospect this was not a great beginner Haskell program to write. Too much type system wrestling for me, at the time.
I still think isolating one’s state changes into specific kinds of buckets is a great idea. But, I think other languages have since packaged it more accessibly and pragmatically than Haskell does.
As my parent comment implies, I don’t like Haskell much. But, if there is one thing I wish my favorite language (Standard ML) could borrow from Haskell, it’s precisely the ability to track effects with types. What are those more practical alternatives you are thinking of?