   [tag-attrs attrs]
   (let [attrs (for [[k v] attrs
                     :let [k (react-attr->html k)]
-                    :when (not (.startsWith k "on"))]
+                    :when (not (.startsWith ^String k "on"))]
                 [k v])
         class (if (:class tag-attrs)
                 (str (:class tag-attrs) " " (:class attrs))

;;; render html

(defprotocol HtmlRenderer
  (render-html [this]
    "Turn a Clojure data type into a string of HTML."))

(defn- render-element
  "Render an element vector as a HTML element."
  [element]
  (let [[tag attrs content] (normalize-element element)]
    (if (container-tag? tag content)
      (str "<" tag (render-attr-map attrs) ">"
           (render-html content)
           "</" tag ">")
      (str "<" tag (render-attr-map attrs) "/>"))))

(extend-protocol HtmlRenderer
  IPersistentVector
  (render-html [this]
    (render-element this))
  ISeq
  (render-html [this]
    (apply str (map render-html this)))
  Named
  (render-html [this]
    (name this))
  String
  (render-html [this]
    this)
  Object
  (render-html [this]
    (str this))
  nil
  (render-html [this]
    ""))

  void-tags
  #{"area" "base" "br" "col" "command" "embed" "hr" "img" "input" "keygen" "link"
    "meta" "param" "source" "track" "wbr"})

;;; adler32

(defn adler32 [value]
  (-> (doto (Adler32.)
        (.update (.getBytes ^String value)))
    .getValue))

;;; to-str

