Elm – Funktionale Webentwicklung ohne Laufzeitfehler

Elm ist eine rein funktionale Sprache, die zu JavaScript kompiliert und speziell für zuverlässige Web-Oberflächen entwickelt wurde. Ihr Markenzeichen: Der Compiler fängt fast alle Fehler bereits zur Übersetzungszeit ab – zur Laufzeit treten praktisch keine Ausnahmen mehr auf. Elm eignet sich hervorragend, um JavaScript-Frontends durch eine wartbare, typsichere Alternative zu ersetzen.

Die wichtigsten Elm-Befehle und Werkzeuge

  • elm init – legt ein neues Projekt mit elm.json und src/ an.
  • elm reactor – startet einen lokalen Entwicklungsserver mit Live-Neuladen (Standard: http://localhost:8000).
  • elm make src/Main.elm --output=main.js – kompiliert ein Modul zu JavaScript; mit --optimize für den Produktions-Build.
  • elm repl – interaktive Konsole zum Experimentieren mit Ausdrücken und Typen.
  • elm install elm/http – installiert ein Paket aus dem offiziellen Elm-Paketkatalog.
  • elm bump – berechnet die nächste Versionsnummer nach semantischer Versionierung.
  • elm review – statische Analyse mit Regeln (ähnlich einem Linter).
  • elm-test – führt Unit- und Fuzz-Tests aus (eigene CLI).

Grundkonzepte

  • Model-Update-View: Jede Elm-App besteht aus einem Zustandsmodell, einer update- und einer view-Funktion – der Elm Architecture folgend.
  • Unveränderliche Daten: Werte können nicht verändert, nur neu erzeugt werden. Das macht Nebenläufigkeit und Debugging einfacher.
  • Typsystem: Jeder Wert hat einen festen Typ; Maybe und Result ersetzen null und Exceptions.

Beispiel: Counter

module Main exposing (main)

import Browser
import Html exposing (button, div, text)
import Html.Events exposing (onClick)

type Msg = Inkrement | Dekrement

update msg model =
    case msg of
        Inkrement -> model + 1
        Dekrement -> model - 1

view model =
    div []
        [ button [ onClick Dekrement ] [ text "-" ]
        , text (String.fromInt model)
        , button [ onClick Inkrement ] [ text "+" ]
        ]

main = Browser.sandbox { init = 0, update = update, view = view }

Wann Elm sinnvoll ist

Elm glänzt bei mittelgroßen, langfristig gepflegten Frontends: Formularen, Dashboards und interaktiven Visualisierungen. Für sehr große Teams ist das Ökosystem kleiner als das von TypeScript, dafür bietet Elm durch sein Modell mehr Sicherheit.

Weiterführend: Haskell – die Mutter der rein funktionalen Sprachen und der Glossar-Eintrag Kompilieren.