Re: record implementing interface with boolean signature, how to???

2016-02-03 Thread William la Forge
Forgot the this parameter. Sorry. Please ignore. :-(

On Wednesday, February 3, 2016 at 3:18:34 PM UTC-5, William la Forge wrote:
>
> Having a bit of a problem implementing the IAtom interface in a record. 
> Specifically, this is the signature giving me grief:
>
> boolean compareAndSet(Object oldv, Object newv);
>
> This isn't the answer:
>
> (^boolean compareAndSet [oldv newv] ... )
>
>
> I get "Can't define method not in interfaces: compareAndSet".
>
> Any ideas? Thanks!
>
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: record implementing interface with boolean signature, how to???

2016-02-03 Thread William la Forge
Here's the interface I'm 
overriding: 
https://github.com/clojure/clojure/blob/master/src/jvm/clojure/lang/IAtom.java

And I'm using clojure 1.8.0.

Oh. Interesting. I was using cursive for compiling, but switched to boot. 
Getting some interesting warnings now too:

WARNING: Bad method signature in protocol implementation, IDeref does not 
declare method called deref at line 90 src\cljc\aautil\dewdrop.cljc
WARNING: Bad method signature in protocol implementation, IAtom does not 
declare method called reset at line 90 src\cljc\aautil\dewdrop.cljc
WARNING: Bad method signature in protocol implementation, IAtom does not 
declare method called swap at line 90 src\cljc\aautil\dewdrop.cljc
WARNING: Bad method signature in protocol implementation, IAtom does not 
declare method called compareAndSet at line 90 src\cljc\aautil\dewdrop.cljc
 clojure.lang.ExceptionInfo: 
java.lang.IllegalArgumentException: Can't define method not in interfaces: 
compareAndSet, compiling:(aautil/dewdrop.cljc:90:1)
data: {:file
  
 "C:\\Users\\Bill\\AppData\\Local\\Temp\\boot.user1581043804101612299.clj",
   :line 31}
java.util.concurrent.ExecutionException: 
java.lang.IllegalArgumentException: Can't define method not in interfaces: 
compareAndSet, compiling:(aautil/dewdrop.cljc:90:1)


So here's the whole thing:

(ns aautil.dewdrop
  #?(:clj (:require [clojure.string :as str]
[clojure.edn :refer [read-string]])
 :cljs (:require [clojure.string :as str]
 [cljs.reader :refer [read-string]]))
  #?(:clj (:refer-clojure :exclude [read-string]))
  #?(:clj (:import (clojure.lang IDeref IAtom

(defn new-lens
  "Create a new lens."
  [getter setter]
  {:getter getter :setter setter})

(defn lget
  "Extract an item from some data.
  Returns the extracted item."
  [lens data]
  ((:getter lens) data))

(defn lderef
  "Extract an item from data held by an atom.
  Returns the extracted item."
  [lens data-atom]
  (lget lens @data-atom))

(defn lset!
  "Revise some data with an item.
  Returns the revised data."
  [lens data item]
  ((:setter lens) data item))

(defn lreset!
  "Revise some data held by an atom with an item.
  Returns the revised data."
  [lens data-atom item]
  (reset! data-atom (lset! lens @data-atom item)))

(defn lupd!
  "Update an item in some data.
  Returns the revised data."
  [lens data f]
  (lset! lens data (f (lget lens data

(defn lswap!
  "Update an item in some data held by an atom.
  Returns the revised data."
  [lens data-atom f]
  (swap! data-atom
 (fn [data]
   (lupd! lens data f

(defn lcomp
  "Combine a lens with another."
  [left right]
  {:getter
   (fn [data] (lget left (lget right data)))
   :setter
   (fn [data item]
 (let [right-data (lget right data)
   left-data (lset! left right-data item)]
   (lset! right data left-data)))})

(defn key-lens
  "Builds a lens using get and assoc"
  [key]
  {:getter (fn [data] (get data key))
   :setter (fn [data item] (assoc data key item))})

(defn atom-key-lens
  "Builds a lens using get and assoc"
  [key-atom]
  {:getter (fn [data] (get data @key-atom))
   :setter (fn [data item] (assoc data @key-atom item))})

;A lens built using read-string and pr-str.
(def edn-lens
  {:getter read-string
   :setter (fn [_ item] (pr-str item))})

(defn printing-lens
  "A lens for debugging"
  [id]
  {:getter (fn [item]
 (println id :got item)
 item)
   :setter (fn [data item]
 (println id :set data item)
 item)})

(defrecord lens-view [lens data-atom]
  IDeref
  (deref [this] (lderef lens data-atom))
  IAtom
  (reset [this item] (lreset! lens data-atom item))
  (swap [this f] (lswap! lens data-atom f))
  (swap [this f arg]
(swap! data-atom
   (fn [data]
 (lset! lens data (f (lget lens data) arg)
  (swap [this f arg1 arg2]
(swap! data-atom
   (fn [data]
 (lset! lens data (f (lget lens data) arg1 arg2)
  (swap [this f x y args]
(swap! data-atom
   (fn [data]
 (lset! lens data (apply f (lget lens data) x y args)
  (^Boolean compareAndSet [oldv newv]
(swap! data-atom
   (fn [data]
 (let [v (lget lens data)]
   (if (= oldv v)
 (lset! lens data newv)
 data)
  )

(defn lview [lens data-atom]
  (->lens-view lens data-atom))


On Wednesday, February 3, 2016 at 3:18:34 PM UTC-5, William la Forge wrote:
>
> Having a bit of a problem implementing the IAtom interface in a record. 
> Specifically, this is the signature giving me grief:
>
> boolean compareAndSet(Object oldv, Object newv);
>
> This isn't the answer:
>
> (^boolean compareAndSet [oldv newv] ... )
>
>
> I get "Can't define method not in interfaces: compareAndSet".
>
> Any ideas? Thanks!
>
>

-- 
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to 

Re: record implementing interface with boolean signature, how to???

2016-02-03 Thread Gregg Reynolds
On Feb 3, 2016 2:18 PM, "William la Forge"  wrote:
>
> Having a bit of a problem implementing the IAtom interface in a record.
Specifically, this is the signature giving me grief:
>
> boolean compareAndSet(Object oldv, Object newv);
>
> This isn't the answer:
>
> (^boolean compareAndSet [oldv newv] ... )
>

^Boolean?

>
> I get "Can't define method not in interfaces: compareAndSet".
>
> Any ideas? Thanks!
>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
"Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: record implementing interface with boolean signature, how to???

2016-02-03 Thread William la Forge
The hint seems to have no effect.

On Wednesday, February 3, 2016 at 3:28:44 PM UTC-5, Gregg Reynolds wrote:
>
>
> On Feb 3, 2016 2:18 PM, "William la Forge"  > wrote:
> >
> > Having a bit of a problem implementing the IAtom interface in a record. 
> Specifically, this is the signature giving me grief:
> >
> > boolean compareAndSet(Object oldv, Object newv);
> >
> > This isn't the answer:
> >
> > (^boolean compareAndSet [oldv newv] ... )
> >
>
> ^Boolean?
>
> >
> > I get "Can't define method not in interfaces: compareAndSet".
> >
> > Any ideas? Thanks!
> >
> > -- 
> > You received this message because you are subscribed to the Google
> > Groups "Clojure" group.
> > To post to this group, send email to clo...@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+u...@googlegroups.com 
> > For more options, visit this group at
> > http://groups.google.com/group/clojure?hl=en
> > --- 
> > You received this message because you are subscribed to the Google 
> Groups "Clojure" group.
> > To unsubscribe from this group and stop receiving emails from it, send 
> an email to clojure+u...@googlegroups.com .
> > For more options, visit https://groups.google.com/d/optout.
>

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.


Re: record implementing interface with boolean signature, how to???

2016-02-03 Thread Nicola Mometto
you're missing the `this` argument in the argvec.

(compareAndSet [this oldv newv] ..)

the boolean type hint shoulnd't be necessary.

On Wed, Feb 3, 2016 at 8:18 PM, William la Forge  wrote:
> Having a bit of a problem implementing the IAtom interface in a record.
> Specifically, this is the signature giving me grief:
>
> boolean compareAndSet(Object oldv, Object newv);
>
> This isn't the answer:
>
> (^boolean compareAndSet [oldv newv] ... )
>
>
> I get "Can't define method not in interfaces: compareAndSet".
>
> Any ideas? Thanks!
>
> --
> 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
> ---
> You received this message because you are subscribed to the Google Groups
> "Clojure" group.
> To unsubscribe from this group and stop receiving emails from it, send an
> email to clojure+unsubscr...@googlegroups.com.
> For more options, visit https://groups.google.com/d/optout.

-- 
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
--- 
You received this message because you are subscribed to the Google Groups 
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/d/optout.