HTML5 Zone is brought to you in partnership with:

Hirvesh Munogee is a freelance web developer who also happens to have a passion for blogging. Hirvesh is a DZone MVB and is not an employee of DZone and has posted 177 posts at DZone. You can read more from them at their website. View Full User Profile

Elm - A Functional Reactive Programming Language Meant To Replace HTML/CSS/JavaScript

12.17.2012
| 4299 views |
  • submit to reddit

Elm is a functional reactive programming language meant to replace HTML/CSS/JavaScript. Elm is optimized for creating web GUIs, supporting complex user input, and avoiding callbacks.

Functional Reactive Programming (FRP) allows rich interaction in a functional setting. It answers the question, “How can I handle user input and update a GUI in a functional way?” FRP ends up making it much easier to create interactive GUIs and to work with complex sequences of synchronous and asynchronous events. Its ideas can be valuable in an imperative setting too.

FRP comes down to one simple idea: some values change over time. In FRP, these time-varying values are called signals and they update automatically.

FRP becomes truly powerful when paired with a good graphics library, making it possible to create interactive pages or design purely functional games.

Functional reactive programming (FRP) is a declarative approach to GUI design. The term declarative makes a distinction between the “what” and the “how” of programming. A declarative language allows you to say what is displayed, without having to specify exactly how the computer should do it.

The term declarative is important only because most current frameworks for graphical user interfaces are not declarative. They mire programmers in the many small, nonessential details of handling user input and manually modifying the display.

So with FRP, many of the irrelevant details are left to the compiler, freeing the programmer to think about things that matter. That means no event handlers, no callbacks, no DOM manipulations. These things simply are not necessary with FRP in Elm.

Coding these examples in a traditional GUI framework – such as HTML/CSS/JavaScript – would require significantly more work and headache. Imagine manually extracting the mouse position from an event, adjusting the value to deal with cross-browser incompatibilities, finding a node in the DOM based on its ID, and finally describing exactly how to destructively modify that node. Not only is that painful to code, but it also requires broad and deep knowledge of inconsequential things.

FRP makes tasks considerably easier by taking care of the messy “how” of events, display, and updates.

Requirements: None
Demo:http:/ / elm-lang. org/ Examples. elm
License: BSD3

Published at DZone with permission of Hirvesh Munogee, author and DZone MVB. (source)

(Note: Opinions expressed in this article and its replies are the opinions of their respective authors and not those of DZone, Inc.)