Recs.
Updated
SpecsUpdate
Pros
Pro Compile errors are human-friendly
A lot of thought has gone into making the user experience of encountering compile errors as delightful as possible. See more info at http://elm-lang.org/blog/compiler-errors-for-humans.
Pro Easier to make front ends than JS
This is perhaps subjective but I think it holds pretty true.
Pro Great and simple way to learn Purely Functional Programming
You can try to apply some functional programming ideas in other languages that have an imperative basis, but you haven't seen the real power unless you tried it in the environment of purely functional programming. Elm is a simple language with great learning resources and easy graphical output, which makes it easy to explore the power of functional programming. Plus programming in Elm is very readable.
Pro Higher confidence in code correctness and quality
Pure functions, immutable data structures, amazing compiler, clean and homologous syntax used for HTML, logic, and optionally to replace CSS, elimination of entire classes of bugs so you don't even need most unit tests. These factors lead to better code, better programs, higher confidence, and ultimately, more satisfaction.
Pro Static module system
Elm uses easy to use modules.
Use:
import List
import List as L
import List exposing (..)
import List exposing ( map, foldl )
import Maybe exposing ( Maybe )
import Maybe exposing ( Maybe(..) )
import Maybe exposing ( Maybe(Just) )
Creation:
module MyModule exposing (foo, bar)
Cons
Con Issues are swept under the rug
Controversies and criticism is ignored and actively hidden from the community. Breaking changes in new versions are not officially documented (e.g. removal of Native Modules, Name Shadowing, 4+ Elements Tuples and custom operators do not appear in the official announcement for Elm 0.19) to avoid discussion.
Con Missing syntactic sugar ('where' clauses, pattern guards)
Elm is missing a lot of syntactic sugar that Haskellers may consider core, such as 'do' notation, 'where' clauses, pattern guards, and operator sections.
Con Not quite Haskell semantics
Elm is a strict language, semantically different from Haskell. Elm also borrows a lot from OCaml and F#. While this makes for a nice syntax, it does mean that, for the Haskell programmer, there may be some surprises when it comes to semantics or function names.
Con No higher-kinded types
This significantly limits Elm's abstraction power compared to Haskell. A generic type can be considered a function at the type level. A higher-kinded type is a higher-order function at the type level (higher-order functions are those that take function objects as arguments or return function objects as results).