Your REPL is trying to print wrapper
in some useful manner, and that includes the value that you'd get after deref'ing it:
(defn- deref-as-map [^clojure.lang.IDeref o]
(let [pending (and (instance? clojure.lang.IPending o)
(not (.isRealized ^clojure.lang.IPending o)))
[ex val]
(when-not pending
(try [false (deref o)]
(catch Throwable e
[true e])))]
{:status
(cond
(or ex
(and (instance? clojure.lang.Agent o)
(agent-error o)))
:failed
pending
:pending
:else
:ready)
:val val}))
(defmethod print-method clojure.lang.IDeref [o ^Writer w]
(print-tagged-object o (deref-as-map o) w))
Note that printing out promise
works just fine because the first function above explicitly checks for it.