   IHash
   (-hash [this] (goog/getUid this))
 
+  ISonar
+
   ISonarGet
   (-get [_this path]
     (binding [ratom/*ratom-context* nil]

    (-register sonar path reaction)
    reaction))

(defn create-sonar [source]
  {:pre [(nil? (get sonars source))]}
  (let [sonar (make-sonar source)]
    (set! sonars (assoc sonars source sonar))


(defonce ^:mutable sonars {})

(declare destroy-sonar!)

(defprotocol ISonar)

(defprotocol ISonarGet
  (-get [this path]))
