   Symbol
   (-inspect [this] (literal "symbol" this))
 
+  PersistentArrayMap
+  (-inspect [this]
+    (coll-view this "{" "}" "map persistent-array-map"))
+
+  PersistentHashMap
+  (-inspect [this]
+    (coll-view this "{" "}" "map persistent-array-map"))
+
   PersistentVector
   (-inspect [this] (coll-view this "[" "]" "vector"))
 

;; ---------------------------------------------------------------------
;; View helpers

(declare view)

(defn- literal [class x]
  (dom/span #js {:className class :key x}
    (pr-str x)))

(defn coll-view [data opener closer class]
  (om/build view data
    {:opts {:opener opener :closer closer :class class}}))

(defn inspect* [x]
  (cond
    (satisfies? IInspect x)
    (-inspect x)

          (dom/span #js {:className (str "key " key-class) 
                         :style #js {:display "inline-block"
                                     :verticalAlign "top"}}
            (inspect k))
          (dom/span #js {:style #js {:display "inline-block"
                                     :width "1em"}})
          (dom/span #js {:className (str "val " val-class)
                         :style #js {:display "inline-block"
                                     :verticalAlign "top"}}
            (inspect v)))))))

(defn sequential->dom [data]
  (into-array
    (for [[i x :as pair] (map-indexed vector data)]
      (dom/li #js {:className "entry"
                   :key (str pair)}
        (inspect x)))))

(defn coll->dom [data]
  (cond
   (map? data)
   (associative->dom data {:entry-class "map-entry"
