   opposite direction, construct a lens that focuses and updates
   a converted value."
   [one->other other->one]
-  (lens
-   one->other
-   (fn [s f]
-     (other->one (f (one->other s))))))
+  (lens one->other
+        (fn [s f]
+          (other->one (f (one->other s))))))
 
 ;; lenses
 


  The lens is not well-behaved, depens on the outcome of the predicate."
  [applies?]
  (lens
   (fn [s]
     (when (applies? s)
       s))
   (fn [s f]
     (if (applies? s)
       (f s)
       s))))

(defn nth
  "Given a number, returns a lens that focuses on the given index of
  a collection."
  [n]
  (lens
    (fn [s]
      (clojure.core/nth s n))
    (fn [s f]
      (update s n f))))

(def fst (nth 0))
(def snd (nth 1))

(defn sequential-empty
  {:internal true
   :no-doc true}
  [coll]
  (cond
    (map? coll) {}


     clojure.lang.IRef
     (addWatch [self key cb]
       (locking self
         (set! (.-watchers self) (assoc watchers key cb))
         (when (= (count (.-watchers self)) 1)
           (add-watch src id (make-watcher self lens equals?)))
         self))

     (removeWatch [self key]
