Recs.
Updated
SpecsUpdate
Pros
Pro Packages work well together
The coherent package manager constrains packages to a semantic versioning scheme which makes it easy (even automatic) to find a set of packages that work together properly. It also makes it much easier for package authors to keep their packages up to date and in sync.
Pro Low mental overhead
Few programming concepts need to be kept in mind while programming in Elm (particularly the case from version 0.17 onwards). This is beneficial for learners new to programming, but it also helps more experienced programmers to focus on application logic instead of "administration" needed to work in a particular framework/language. This keeps the cost of refactoring low, which is also a pro for beginners and experts alike, making it sensible to stay in Elm after gaining more experience.
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)