Three new threading operators in evaluator.sx:
- ->> (thread-last): inserts value as last arg
- |> (pipe): alias for ->> (F#/OCaml convention)
- as-> (thread-anywhere): binds value to named variable
(->> 10 (- 3)) ;; => -7 (thread-last: (- 3 10))
(-> 10 (- 3)) ;; => 7 (thread-first: (- 10 3))
(->> 1 (list 2 3)) ;; => (2 3 1)
(as-> 5 x (+ x 1) (* x 2)) ;; => 12
Two transpiler bugs fixed:
1. Non-recursive functions (let without rec) weren't chained as `and`
in the let rec block — became local bindings inside previous function
2. CekFrame "extra" field wasn't in the cf_extra key mapping — mode
was always Nil, making thread-last fall through to thread-first
Also: added missing step-sf-case definition to evaluator.
2644 tests pass, zero regressions.
Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>