- Tuple index: `pair.0`, `pair.1` syntax across parser, typechecker,
interpreter, C/JS backends, formatter, linter, and symbol table
- Multi-line function args: allow newlines inside argument lists
- Fix effect unification for callback parameters (empty expected
effects means "no constraint", not "must be pure")
Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
- Add full Dom effect: querySelector, createElement, addEventListener,
setAttribute, classList, styles, forms, scrolling, etc.
- Add Html module for type-safe HTML construction (Elm-style)
- Add TEA (The Elm Architecture) runtime for browser apps
- Add view dependency analysis for Svelte-style optimizations
- Support both browser and Node.js environments
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Phase 2 of JS backend: implement effect handlers in runtime
Effects added:
- Console: print, readLine, readInt
- Random: int, bool, float
- Time: now, sleep
- Http: get, post, postJson (async with fetch)
Bug fixes:
- Fix if-else with blocks executing both branches (use if-else
statement instead of ternary for branches with statements)
- Fix main function being called twice when top-level let binding
already invokes it
- Fix List module operations incorrectly treated as effect operations
New tests:
- test_js_random_int
- test_js_random_bool
- test_js_random_float
- test_js_time_now
All 19 JS backend tests pass.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>
Add 10 integration tests that compile Lux to JavaScript and verify
correct execution in Node.js:
- test_js_factorial: Recursion and effects
- test_js_fibonacci: Classic recursive algorithm
- test_js_adt_and_pattern_matching: Custom ADTs with match
- test_js_option_type: Built-in Option type handling
- test_js_closures: Closure creation and variable capture
- test_js_higher_order_functions: Functions as values
- test_js_list_operations: List.map, List.foldl
- test_js_pipe_operator: Pipe (|>) operator
- test_js_records: Record literal and field access
- test_js_string_concatenation: String operations
Also fix List module operations being incorrectly treated as effects
by adding special-case handling in EffectOp emission.
Co-Authored-By: Claude Opus 4.5 <noreply@anthropic.com>