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
map
andandThen
functions 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.The Elm community is diverse in that is has brought together Javascript web programmers, and people with a more formal software engineering (myself) or accademic background, as well as complete beginners. It is great that Haskell exists and has enabled so much FP language research to happen, but Elm is where that translates into a practical, lovable, day-to-day code production language. I would call Scala a compromise language; it tries to be all things to all people by including too many language features. Elm is not a compromise language, it is a carefully chosen and minimal set of language features. I like to think of Elm as a Goldilocks language, well positioned and ‘just right’ for its use case.
Very well said!