Recs.
Updated
Elm is a functional programming language for the Web that compiles to HTML, CSS, and JavaScript/ECMAScript. Its design has been observed to lead to accidental good software architecture, which has come to be known as the Elm Architecture, and is the inspiration for Redux.
SpecsUpdate
Pros
Pro No runtime exception as users can easily find errors on compiler messages.
Pro Immutable -> deterministic -> hot-swappable code -> time-travelling debugger
Using Elm's immutable data + pure-function determinism and elm-reactor, a built-in live debugging web server, you can record your inputs live, reverse execution, make changes to your code, and play forward your inputs to see how your changes affect output. This is beyond amazingly useful for running up to a problem in your game, rewinding the execution to a known good state, fixing your code, then running it forward, and rapidly repeating until things work the way you want. Never again have to waste time stopping, re-compiling, and playing the game up to where your code executes every single time you patch or re-factor. Elm and the time-travelling debugger is your new best friend!
Pro Community packages
The Elm community shares in actively developing and maintaining community packages that use the Elm Architecture to tackle specific problems and provide libraries of advanced functionality. On top of the individual developer contributions available in the Elm package repository, community packages provide a sort of standard library of extensions that compliment one another and build upon the core Elm packages.
Pro Compiles to HTML + CSS + JavaScript
Compile direct to the Web Platform. Use HTML5 technologies, including canvas, WebGL, Websockets, WebAudio, and more. Works with external JS scripts and libraries. So, go ahead and use Elm with JS game engines and frameworks like Phaser, Pixi.js, and many, many others. Feel empowered to use Elm in your hybrid apps through mobile wrappers like Cordova/PhoneGap and CocoonJS, and with accelerated modern WebViews like Canvas+, WkWebView, Crosswalk, etc.
Pro Pub/Sub simplified effects model
Elm implements an observer and emitter model for publishing and subscribing to events and other data streams, allowing Elm programs to interact with and respond to the external runtime environment. This extends to input and other browser events, external JS command execution, async network requests, RequestAnimationFrame(), timers, and more.
Pro Lightning fast Virtual DOM
Like Mercury and Om, the Elm language uses virtual DOM to speed up manipulations, transformations, and property and attribute accesses, enabling extremely high levels of responsiveness. This feature, coupled with the Elm Architecture, is the inspiration for the popular Redux project of ReactJS fame.
Pro Excellent language support in Visual Studio Code (cross-platform, free, open source rapid development editor with tooling)
The Elm language extension is par excellence, with syntax highlighting, auto-completion, code snippets, live function lookup and documentation (IntelliSense support), built-in Elm REPL (interactive command line), built-in elm-reactor (the time-travelling debugger) as the debug browser, and line-granular compile error highlighting, with more features like refactoring support and even more code snippets being developed.
Cons
Recommendations
Comments
Out of Date Pros + Cons
Pro FRP is well suited to the task and Elm has it baked in
FRP provides a good model for developing games.