type returns the JVM class (Clojure semantics)

(type x) was jolt's internal taxonomy keyword (:string/:set/:jolt/inst), which
breaks any library dispatching a multimethod on [(type a) (type b)] against
java/clojure.lang classes (e.g. clojure.tools.logging.test's matchers). Make the
PUBLIC clojure.core/type Clojure's (or (:type meta) (class x)).

The taxonomy keyword stays the core model: natives-meta.ss keeps jolt-type and
exposes it as __type-tag, which print-method/print-dup dispatch on (so #uuid/#regex/
records still print). The JVM mapping lives in the java host layer — host-class.ss
defines the public type next to (class …), and a jinst now reports java.util.Date
(was :jolt/inst). So the core emits the taxonomy and the java layer remaps it in one
place. unit.edn's type suite updated to the class names. make test green.
This commit is contained in:
Yogthos 2026-06-26 17:14:01 -04:00
parent 6c03dffd00
commit 517918731c
8 changed files with 56 additions and 36 deletions

View file

@ -150,7 +150,7 @@
;; documented jolt divergence).
(defmulti print-method (fn [x writer]
(let [t (get (meta x) :type)]
(if (keyword? t) t (type x)))))
(if (keyword? t) t (__type-tag x)))))
(defmethod print-method :default [o w]
(.write w (__pr-str1 o))
@ -160,7 +160,7 @@
;; (as Clojure's default does for most types).
(defmulti print-dup (fn [x writer]
(let [t (get (meta x) :type)]
(if (keyword? t) t (type x)))))
(if (keyword? t) t (__type-tag x)))))
(defmethod print-dup :default [o w] (print-method o w))