01 · SpracheKlein, streng, ohne Überraschungen
Alles ist ein Ausdruck. Es gibt kein null, keine Ausnahmen, keine impliziten Umwandlungen und keine Schleifen.
TypenInt (64 Bit), Float, Bool, Unit, Str, Bytes, List[T], Map[K, V] (nach Schlüssel geordnet), Option[T], Result[T, E] und Funktionstypen.
Records und VariantenEigene Typen als Record oder als Aufzählung mit Daten.type Shape = Circle(Int) | Rect(Int, Int) | Dot
GenericsGenerische Typen und Funktionen; die Typargumente werden beim Aufruf abgeleitet.fn swap[A, B](p: Pair[A, B]) -> Pair[B, A]
Vollständiges Pattern MatchingMuster mit Konstanten, Varianten, Records und Wächtern. Jedes match muss alle Fälle abdecken.
ClosuresAnonyme Funktionen, die ihre Umgebung einfangen. Werte sind unveränderlich; Funktionen sind Werte.map(xs, fn(x) => x * k)
Effekte im TypWer liest, schreibt oder ins Netz geht, sagt es: !io !fs !time !rand !net !db !model. Aufrufer erben die Vereinigung.
Effekt-PolymorphieEine Funktion nimmt die Effekte ihres Callbacks an; mit einem reinen Callback bleibt sie rein.fn each[T, !e](xs: List[T], f: fn(T) -> Unit !e) -> Unit !e
Rekursion statt SchleifenEin Aufruf in Endposition ist eine Schleife. Listen werden mit map, filter, fold und range verarbeitet.
Exakte Ganzzahlena * b / c rechnet mit 128-Bit-Zwischenergebnis exakt. Ein echter Überlauf und Division durch null brechen ab, statt falsch weiterzurechnen.
Platzhaltertodo() steht für einen noch fehlenden Rumpf beliebigen Typs; ausgeführt bricht er mit E0540 ab.