 ;; Seems really ugly to have mirrored vectors, but ...
 ;; the code kinda falls out when you do. I'm feeling lazy.
 (def ^:private app-explain (reagent/atom ""))         ;; mirrors app-db
-(def ^:private undo-explain-list (reagent/atom []))   ;; mirrors undo-liat
+(def ^:private undo-explain-list (reagent/atom []))   ;; mirrors undo-list
 (def ^:private redo-explain-list (reagent/atom []))   ;; mirrors redo-list
 
 

    (reset! redos r)
    (reset! undos (pop u))))


(handlers/register-base     ;; not a pure handler
  :undo                     ;; usage:  (dispatch [:undo])
  (fn handler
    [_ _]
    (if-not (undos?)
      (warn "re-frame: you did a (dispatch [:undo]), but there is nothing to undo.")
      (do
        (undo undo-list app-db redo-list)
        (undo undo-explain-list app-explain redo-explain-list)))))


(defn- redo



(subs/register
  :undo-explanations
  (fn handler
    ; "return a vector of string explanations ordered oldest to most recent"
    [_ _]
    (reaction (conj @undo-explain-list @app-explain))))

(subs/register
  :redo-explanations
  (fn handler
    ; "returns a vector of string explanations ordered from most recent undo onward"
    [_ _]
    (reaction (deref redo-explain-list))))

;; -- event handlers  ----------------------------------------------------------------------------


(defn- undo
  [undos cur redos]
  (let [u @undos
        r (cons @cur @redos)]
