   (seq [this]
     ;; Using the higher-arity form of map prevents chunking.
     (map (fn [[k v] _]
-           (map-entry k (force v)))
+           (lazy-map-entry k v))
          contents
          (repeat nil)))
 

;;; but makes a few improvements, like having the seq not return
;;; map entries with Delays still in them, supporting reduce-kv,
;;; and having a prettier str representation.
(deftype LazyMap [^clojure.lang.IPersistentMap contents]
  clojure.lang.Associative
  (containsKey [this k]
    (.containsKey contents k))
  (entryAt [this k]
    (map-entry k (.valAt this k)))

  clojure.lang.IFn
  (invoke [this k]

  (iterator [this]
    (.iterator
      ^java.lang.Iterable
      (.seq this)))

  java.lang.Object
  (toString [this]
    (str (map-vals #(if (and (delay? %)
                             (not (realized? %)))
                      (->PlaceholderText "<unrealized>")
                      (force %))
                   contents))))

(extend-print LazyMap #(.toString ^LazyMap %))

(defn ->lazy-map
  [map]
