From the REPL this code runs fine:
(def map-a {:a 1 :b 2 :c 3})
(def map-b {:a 1 :b 2 :c 3})
(def my-map
(merge
(ordered-map map-a)
map-b))
;; #ordered/map ([:a 1] [:c 3] [:b 2])
However, if the same exact code is in the toplevel of a ns then a compilation error occurs as seen below:
(The above code exits in ordered-map-compiler-bug.core
.)
$ lein compile
Compiling ordered-map-compiler-bug.core
Exception in thread "main" java.lang.ClassCastException: ordered.map.OrderedMap cannot be cast to ordered.map.OrderedMap, compiling:(core.clj:8)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3387)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3381)
at clojure.lang.Compiler$DefExpr.eval(Compiler.java:398)
at clojure.lang.Compiler.compile1(Compiler.java:7035)
at clojure.lang.Compiler.compile(Compiler.java:7097)
at clojure.lang.RT.compile(RT.java:387)
at clojure.lang.RT.load(RT.java:427)
at clojure.lang.RT.load(RT.java:400)
at clojure.core$load$fn__4890.invoke(core.clj:5415)
at clojure.core$load.doInvoke(core.clj:5414)
at clojure.lang.RestFn.invoke(RestFn.java:408)
at clojure.core$load_one.invoke(core.clj:5227)
at clojure.core$compile$fn__4895.invoke(core.clj:5426)
at clojure.core$compile.invoke(core.clj:5425)
at user$eval7.invoke(NO_SOURCE_FILE:1)
at clojure.lang.Compiler.eval(Compiler.java:6511)
at clojure.lang.Compiler.eval(Compiler.java:6501)
at clojure.lang.Compiler.eval(Compiler.java:6477)
at clojure.core$eval.invoke(core.clj:2797)
at clojure.main$eval_opt.invoke(main.clj:297)
at clojure.main$initialize.invoke(main.clj:316)
at clojure.main$null_opt.invoke(main.clj:349)
at clojure.main$main.doInvoke(main.clj:427)
at clojure.lang.RestFn.invoke(RestFn.java:421)
at clojure.lang.Var.invoke(Var.java:419)
at clojure.lang.AFn.applyToHelper(AFn.java:163)
at clojure.lang.Var.applyTo(Var.java:532)
at clojure.main.main(main.java:37)
Caused by: java.lang.ClassCastException: ordered.map.OrderedMap cannot be cast to ordered.map.OrderedMap
at ordered.map$transient_ordered_map.invoke(map.clj:183)
at ordered.map.OrderedMap.asTransient(map.clj:121)
at clojure.core$transient.invoke(core.clj:2931)
at clojure.core$into.invoke(core.clj:6077)
at ordered.map$ordered_map.invoke(map.clj:138)
at clojure.lang.AFn.applyToHelper(AFn.java:161)
at clojure.lang.RestFn.applyTo(RestFn.java:132)
at clojure.lang.Compiler$InvokeExpr.eval(Compiler.java:3382)
... 27 more
Compilation failed: Subprocess failed
If we run lein compile
again then it works fine.