ludic/selfhost
Orkuncakilkaya 6a24b14f0e feat(lang): L5 generic records and functions
property Pool<T> { ... }, function first<T>(xs: []T) -> T, map<T, U> over fn
types; a type writes an instance as Pool<Thing>, nested as deep as needed. The
parser names an instance Pool$Thing and remembers its generic and arguments; the
checker takes the generic declarations out, infers a call's type arguments from
its arguments or its result's declared slot, and makes each instance once as an
ordinary record or function, checked like any other. Errors print Pool<Thing>.
An instance keeps its generic's module and export (L3). ludic-fmt keeps type
arguments together while spacing comparisons and shifts.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
2026-09-24 02:21:15 +03:00
..
backend feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
check feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
frontend feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
golden chore(repo): DX cleanup — categorise examples, text-diffable golden, build/ output (#27 #28 #30) 2026-08-30 18:54:21 +03:00
support feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00
tests fix(compiler): == / != on references is identity; only text compares by content 2026-09-16 16:13:31 +03:00
ludicc.seed.ll feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
ludicc.win.seed.ll feat(lang): L5 generic records and functions 2026-09-24 02:21:15 +03:00
main.ludic feat(lang): L4 type checker between parse and emit 2026-09-24 01:34:49 +03:00