Language coverage

What of Elm this implementation understands — the surface language, the standard library, and where the support lives. The README has the at-a-glance table; this page is the detailed reference. For *which backend* runs each construct see the backends guide; for the bundled non-core libraries see the libraries reference.

Legend: ✅ supported · ⚠️ partial (notes) · ❌ not implemented.

Surface language

ConstructStatusNotes
Module header, exposing (..) / explicit, port module✅dotted module names (Url.Parser) too
Imports: import M, as, exposing, qualified names✅import-aware unqualified resolution
Custom types (type), type aliases (type alias)✅record aliases also define a constructor function
type / type alias inside a let✅a superset of stock Elm; constructors scope to the rest of the let
Type annotations on declarations and let bindings✅checked by Hindley–Milner inference
Int / Float / String / Char literals, multi-line strings✅
Lists, tuples, unit, records✅
Record access r.f, update `{ r \f = v }, accessor .f`✅access is row-polymorphic (looked up by field)
if, let … in, lambdas, curried & partial application✅
case … of patterns: var, wildcard, literal (Int/String/Char), ctor, tuple, list, cons, record, alias (as)✅exhaustiveness-checked
Operators with the elm/core fixity table; layout / offside rule✅
User/package-defined infix operators ((+++) a b = …)✅non-standard in app code, but they run here
Ports (Cmd/Sub ports)✅
GLSL shader literals `[glsl\… \]`⚠️lexed/parsed; rendered by the JS/WebGL backend
Debug.todo / Debug.log / Debug.toString✅

Standard library

Modules the type checker knows (Signatures) and the runtime implements (Prelude for the interpreters, kernel.js / dom.js for the JS backend). The two are kept in lock-step by a coverage guard in both directions.

ModuleStatusNotes
Basics✅arithmetic, comparison, modBy/remainderBy, toPolar/fromPolar, clamp, trig, …
List✅the usual map/filter/fold/sort family; (++) concatenation
String✅incl. toList/fromList/cons/uncons, split/join, toInt/toFloat
Char✅toCode/fromCode, case, isDigit/isAlpha/…, plus isSpace/isPunctuation/isControl
Maybe, Result✅map/andThen/withDefault, map2…
Tuple✅
Dict, Set✅
Array✅list-backed
Json.Decode / Json.Encode✅decoders run against a real JSON parser
Random, Time, Task, Process✅deterministic under the headless driver
Http✅get/post/request, header, emptyBody/stringBody/jsonBody, expectString/expectJson/expectWhatever, the Error constructors
Browser✅sandbox/element/document/application (the last runs headlessly with a synthetic Url/Key)
Browser.Dom⚠️getViewport/getElement return fixed boxes headlessly; focus/blur/setViewport are JS-backend effects
Browser.Events, Browser.Navigation✅subscriptions/keys; navigation is a no-op headlessly
Url, Url.Parser, Url.Parser.Query✅a typed URL router (bundled library)
Html / Html.Attributes / Html.Events, Svg✅virtual DOM, rendered to HTML headlessly and to the real DOM by the JS backend
WebGL, Math.Vector*, Math.Matrix4⚠️computed for real by the JS backend; opaque/headless in the interpreter
Bitwise✅32-bit, matching elm/core and JS
Bytes / Bytes.Encode / Bytes.Decode✅compact list-of-bytes library (every backend)

Beyond stock Elm

A few deliberate supersets and extras:

Not implemented