TaggedLiteral

typesince v0.0-3255 clojure.lang/TaggedLiteralEdit
satisfies IEquiv IHash ILookup IPrintWithWriter

(TaggedLiteral. tag form)

Source code @ clojurescript:src/main/cljs/cljs/core.cljs
(deftype TaggedLiteral [tag form]
  Object
  (toString [coll]
    (pr-str* coll))

  IEquiv
  (-equiv [this other]
    (and (instance? TaggedLiteral other)
         (= tag (.-tag other))
         (= form (.-form other))))

  IHash
  (-hash [this]
    (+ (* 31 (hash tag))
       (hash form)))

  ILookup
  (-lookup [this v]
    (-lookup this v nil))
  (-lookup [this v not-found]
    (case v
      :tag tag
      :form form
      not-found))

  IPrintWithWriter
  (-pr-writer [o writer opts]
    (-write writer (str "#" tag " "))
    (pr-writer form writer opts)))