Error when macroexpanding clojure.core.async/go, clojure.lang.Keyword cannot be cast to clojure.lang.IObj

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 .

This topic was automatically closed 182 days after the last reply. New replies are no longer allowed.