     (throw (IllegalArgumentException.
              (str "Cannot merge blocks with differing ids " (.id a)
                   " and " (.id b)))))
-  (Block. (.id b)
-          (.size b)
-          (.content b)
-          (.reader b)
-          (not-empty (merge (._attrs a) (._attrs b)))
-          (not-empty (merge (._meta  a) (._meta  b)))))
+  (->Block (.id b)
+           (.size b)
+           (.content b)
+           (.reader b)
+           (not-empty (merge (._attrs a) (._attrs b)))
+           (not-empty (merge (._meta  a) (._meta  b)))))

  given the id and size directly, without being checked."
  ^blocks.data.Block
  [id size reader]
  (Block. id size nil reader nil nil))


(defn literal-block

  [id source]
  (let [content (collect-bytes source)]
    (when (pos? (count content))
      (->Block id (count content) content nil nil nil))))


(defn read-block
