 
   IWatchable
   (-notify-watches [this oldval newval]
-    (-notify-watches (._reaction this) oldval newval))
+    (doseq [[key f] watches]
+      (f key this oldval newval)))
   (-add-watch [this key f]
-    (-add-watch (._reaction this) key f))
+    (set! watches (assoc watches key f)))
   (-remove-watch [this key]
-    (-remove-watch (._reaction this) key))
+    (set! watches (dissoc watches key)))
 
   IHash
   (-hash [this] (hash [ratom path])))

              #(reset! src %2)
              #(swap! src assoc-in path %2))
            #(src path %2))]
    (RCursor. src path s nil)))





;;; cursor

(deftype RCursor [ratom path setter ^:mutable reaction
                  ^:mutable state ^:mutable watches]
  IAtom
  IReactiveAtom

