I found this error from macro quite confusing, minimal code is:
(defn github-api! [url params on-error]
(comment println (macroexpand '(chan-once got (delay! 1 #(got 1))))) ; line A
(chan-once got (delay! 1 #(got 1)))) ; line B
implementation of chan-once
is:
when I ran “line A”, I got:
(let* [<result__25383__auto__ (clojure.core.async/chan)
got (clojure.core/fn [x]
(clojure.core.async/go
(clojure.core.async/>! <result__25383__auto__ x)))]
(delay! 1 (fn* [] (got 1))) <result__25383__auto__)
but for “line B” I got error from shadow-cljs:
File: /Users/chen/repo/jimengio/rebase-hell/src/app/util/github.cljs:32:3
--------------------------------------------------------------------------------
29 | (on-error (str "API failed. " error))
30 | (js/console.error error))))))
31 | (comment println (macroexpand '(chan-once got (delay! 1 #(got 1)))))
32 | (chan-once got (delay! 1 #(got 1))))
---------^----------------------------------------------------------------------
Encountered error when macroexpanding clojure.core.async/go.
ClassCastException: clojure.lang.Keyword cannot be cast to clojure.lang.IObj
clojure.core/with-meta--5420 (core.clj:217)
clojure.core/vary-meta (core.clj:675)
clojure.core/vary-meta (core.clj:675)
clojure.core.async/go/fn--3099 (async.clj:421)
clojure.core/map/fn--5866 (core.clj:2755)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.RT.seq (RT.java:535)
clojure.core/seq--5402 (core.clj:137)
clojure.core/apply (core.clj:660)
clojure.core/mapcat (core.clj:2783)
clojure.core/mapcat (core.clj:2783)
clojure.core.async/go (async.clj:421)
clojure.core.async/go (async.clj:405)
clojure.core/apply (core.clj:669)
clojure.core/apply (core.clj:660)
cljs.analyzer/macroexpand-1*/fn--2507 (analyzer.cljc:3790)
cljs.analyzer/macroexpand-1* (analyzer.cljc:3789)
cljs.analyzer/macroexpand-1* (analyzer.cljc:3776)
cljs.analyzer/macroexpand-1 (analyzer.cljc:3839)
cljs.analyzer/macroexpand-1 (analyzer.cljc:3835)
cljs.analyzer/analyze-seq (analyzer.cljc:3872)
cljs.analyzer/analyze-seq (analyzer.cljc:3852)
cljs.analyzer/analyze-form (analyzer.cljc:4061)
cljs.analyzer/analyze-form (analyzer.cljc:4058)
cljs.analyzer/analyze* (analyzer.cljc:4111)
cljs.analyzer/analyze* (analyzer.cljc:4102)
cljs.analyzer/analyze (analyzer.cljc:4131)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/analyze (analyzer.cljc:4124)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/analyze (analyzer.cljc:4122)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/fn--1927 (analyzer.cljc:2224)
cljs.analyzer/fn--1927 (analyzer.cljc:2220)
clojure.lang.MultiFn.invoke (MultiFn.java:252)
cljs.analyzer/analyze-seq* (analyzer.cljc:3845)
cljs.analyzer/analyze-seq* (analyzer.cljc:3843)
cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3850)
cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3848)
cljs.analyzer/analyze-seq (analyzer.cljc:3874)
cljs.analyzer/analyze-seq (analyzer.cljc:3852)
cljs.analyzer/analyze-form (analyzer.cljc:4061)
cljs.analyzer/analyze-form (analyzer.cljc:4058)
cljs.analyzer/analyze* (analyzer.cljc:4111)
cljs.analyzer/analyze* (analyzer.cljc:4102)
cljs.analyzer/analyze (analyzer.cljc:4131)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/analyze (analyzer.cljc:4124)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/analyze (analyzer.cljc:4122)
cljs.analyzer/analyze (analyzer.cljc:4114)
cljs.analyzer/analyze-fn-method-body (analyzer.cljc:2017)
cljs.analyzer/analyze-fn-method-body (analyzer.cljc:2015)
cljs.analyzer/analyze-fn-method (analyzer.cljc:2039)
cljs.analyzer/analyze-fn-method (analyzer.cljc:2019)
cljs.analyzer/fn--1890/fn--1893 (analyzer.cljc:2111)
clojure.core/map/fn--5866 (core.clj:2755)
clojure.lang.LazySeq.sval (LazySeq.java:42)
clojure.lang.LazySeq.seq (LazySeq.java:51)
clojure.lang.RT.seq (RT.java:535)
clojure.core/seq--5402 (core.clj:137)
clojure.core.protocols/seq-reduce (protocols.clj:24)
clojure.core.protocols/fn--8146 (protocols.clj:75)
clojure.core.protocols/fn--8146 (protocols.clj:75)
clojure.core.protocols/fn--8088/G--8083--8101 (protocols.clj:13)
clojure.core/transduce (core.clj:6884)
clojure.core/transduce (core.clj:6870)
cljs.analyzer/fn--1890 (analyzer.cljc:2112)
cljs.analyzer/fn--1890 (analyzer.cljc:2082)
clojure.lang.MultiFn.invoke (MultiFn.java:252)
cljs.analyzer/analyze-seq* (analyzer.cljc:3845)
cljs.analyzer/analyze-seq* (analyzer.cljc:3843)
cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3850)
cljs.analyzer/analyze-seq*-wrap (analyzer.cljc:3848)
cljs.analyzer/analyze-seq (analyzer.cljc:3874)
cljs.analyzer/analyze-seq (analyzer.cljc:3852)
cljs.analyzer/analyze-form (analyzer.cljc:4061)
cljs.analyzer/analyze-form (analyzer.cljc:4058)
cljs.analyzer/analyze* (analyzer.cljc:4111)
--------------------------------------------------------------------------------
33 |
34 | (defn get-commits! [issue-id upstream on-error]
35 | (let [<result (chan)
36 | <commits (github-api!
--------------------------------------------------------------------------------
quite weird since I don’t see a keyword in the generated code… but it says keyword can not be casted.
The project related to the problem is https://github.com/jimengio/rebase-hell .