There is a nice comment in this discussion:
I like how Elm is positioned as a small language that is beginner friendly, but is also strong on getting the job done. It makes a clean break from the accademic functional languages, such as ML, Haskell and OCaml and is better in some ways for it. Compared with those languages the syntax has been cleaned up and made very elegant and minimal, as has the language feature set.
It is true that type classes would bring a lot of power to the language, but I also wonder how often we really need it? It would be most useful for writing packages. Every time I have wanted more powerful features in Elm I have had to find another way, and just write out a new set of
andThenfunctions and some other common FP patterns. It may mean duplication of code, but it has never been hard or time consuming to do. So on the balance between power and simplicity and effort, I think we are paying a small extra effort to keep things simple. More complexity and power would save a small effort, but add cognitive overhead to the language, programs could be far more subtle and difficult to understand. Elm is emphasising simple code and keeping the focus on building something rather than being too clever - I am someone who always gets drawn into the trying to be too clever trap, and I love how Elm frequently stops me from going there.
Very well said!