Thanks all. How would I do this protocol extension thing? My guess is that I need to define the IAtom protocol myself, and then do something like this?
(defprotocol IAtom (compare-and-set! []) ...) (extend-type clojure.lang.Atom IAtom (compare-and-set! []) ... IDeref (deref [])) But will that pass a Atom type hint? I will play with it and see for myself. Thanks. On Dec 6, 7:08 pm, Alyssa Kwan <alyssa.c.k...@gmail.com> wrote: > +1 > > There is no STM integration with atoms. That's not a concern. > > Just write your own Clojure core with your change. I did for durable > identities. <shamelessPlug>git://github.com/kwanalyssa/clojure.git</ > shamelessPlug> > > Seriously though, just use protocols. > > Thanks, > Alyssa > > On Dec 6, 5:24 am, Benjamin Teuber <bsteu...@googlemail.com> wrote: > > > > > > > > > I guess it was Rich's intention to have swap! be used for real atoms > > only so your code remains understandable - that's why it's called > > swap! for atoms, alter for refs and alter-var-root for vars. > > > So why not define your own protocol for updating documents? If you > > really want (usually bad idea, I guess) you could still extend atoms > > or even refs to support this protocol, too. > > > Regards, > > Benjamin > > > On 5 Dez., 23:29, Pepijn de Vos <pepijnde...@gmail.com> wrote: > > > > tl;dr: Please add an interface to clojure.lang.Atom. kthxbye > > > > I had the brilliant idea of using CouchDB for something equally > > > brilliant, and if possible implement a Clojure view server. Turns out > > > Clutch fits the bill perfectly, except that I would like to use Aleph, > > > and Couch is using something called MVCC. > > > > I haven't looked into the libs to deep, but I know the REST API, and what > > > it does for updating is that you need to supply the current revision and > > > if it doesn't match (i.e. there has been another update), the update > > > fails. So then you need to get the new _rev and try again. Much the same > > > way compare-and-set! works. > > > > I thought it would be perfect to implement IAtom and IDeref to get the > > > latest value and to swap! documents in a spin loop with a > > > side-effect-free function, like atoms do. > > > > But it turns out there is no interface for Atom and it is marked final. > > > The same is true for Ref and Agent, but raek suggested this might be > > > because they are more complex and integrated with the STM. > > > > Is there a good reason why I'm not allowed to implement my own atom? If > > > not, can it be added? Thanks. > > > > Groeten, > > > Pepijn de Vos > > > -- > > > Sent from my iPod Shufflehttp://pepijndevos.nl-Hide quoted text - > > > - Show quoted text - -- 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