From a41440210907de08f1a1356dd1f51f62cd3d759f Mon Sep 17 00:00:00 2001 From: Yogthos Date: Mon, 8 Jun 2026 11:19:56 -0400 Subject: [PATCH] Fix dedupe: make-lazy-seq + coll->cells for 20-coll tier The lazy-seq macro (30-macros.clj) is not available when 20-coll loads. Use explicit (make-lazy-seq (fn* [] (coll->cells ...))) expansion. Also fix outer cons leaking raw @[val thunk] cell. 22/22 lazy-infinite, conformance 229 interpret + self-host. --- jolt-core/clojure/core/20-coll.clj | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/jolt-core/clojure/core/20-coll.clj b/jolt-core/clojure/core/20-coll.clj index b0a5c95..91b30ab 100644 --- a/jolt-core/clojure/core/20-coll.clj +++ b/jolt-core/clojure/core/20-coll.clj @@ -223,16 +223,19 @@ ;; Eager dedupe of consecutive equal elements (Jolt has no transducer arity yet). (defn dedupe [coll] (let [step (fn step [s prev] - (lazy-seq - (let [s (seq s)] - (when s - (let [x (first s)] - (if (= x prev) - (step (rest s) prev) - (cons x (step (rest s) x))))))))] + (make-lazy-seq + (fn* [] + (let [s (seq s)] + (if s + (let [x (first s)] + (if (= x prev) + (coll->cells (step (rest s) prev)) + (coll->cells (cons x (step (rest s) x))))) + nil)))))] (let [s (seq coll)] (if s - (cons (first s) (step (rest s) (first s))) + (make-lazy-seq + (fn* [] (coll->cells (cons (first s) (step (rest s) (first s)))))) ())))) ;; Internal helper for {:keys [...]} destructuring over a seq of k/v pairs: