       new-db)))
 
 
-(defn undoable
-  "Middleware which stores an undo checkpoint."
-  [handler]
-  (fn undoable-handler
-    [app-db event-vec]
-    (store-now!)
-    (handler app-db event-vec)))
-
 
 (defn trim-v
   "Middleware which removes the first element of v which allows you to write



(defn path
  "Supplies a sub-tree of `db` to the handler. A narrowed view.
  Assumes \"pure\" is in the middleware pipeline prior.
  Grafts the result back into db.
  If a get-in of the path results in a nil, then \"default-fn\" will be called to supply a value.


(defn pure
  "Acts as an adaptor, allowing handlers to be writen as pure functions.
  The re-frame router will pass in an atom as the first parameter. This
  middleware adapts that atom to be the value within the atom.
  If you strip away the error/efficiency checks, this middleware is just doing:
     (reset! app-db (handler @app-db event-vec))
  You don't have to use this middleare directly. Is supplied by default
  when you use register-handler.
  The only way to by-pass use of pure is to use the low level registration function
  re-frame.handlers/register-handler-base"
  [handler]
  (fn pure-handler
    [app-db event-vec]
