Hi,

maybe a different approach could be to use a richer datatype than a function, 
which carries both: the command and the undo command.

(deftype Command [action undo])

Then you could do something like:

(defn do-patch!
  [command args]
  (dosync
    (let [patch {:command command :args (vec args)}]
      (apply (.action command) args)
      (alter patches- conj patch)
      patch)))

(defn undo-patch!
  []
  (dosync
    ((.undo (:command patch)))
    (alter patches- pop)))

Then you could provide specially crafted Commands and there would not be the 
need to stub anything. Also Commands wouldn't have to be global objects.

Sincerely
Meikel

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to clojure@googlegroups.com
Note that posts from new members are moderated - please be patient with your 
first post.
To unsubscribe from this group, send email to
clojure+unsubscr...@googlegroups.com
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en

Reply via email to