You're right, I may have re-compiled buffers in the wrong order. I
will be more mindful of that in the future. Thanks!


On Oct 15, 12:31 pm, Alan Malloy <a...@malloys.org> wrote:
> The most common cause of issues like this is if you reload ns1 after
> loading ns2, then T2 will be implementing an "old" version of pro-1,
> while fun will be testing for satisfaction of the "current" version.
>
> On Oct 15, 8:04 am, Eric in San Diego <eric.sc...@acm.org> wrote:
>
>
>
>
>
>
>
> > Hi all -
>
> > I'm experiencing some unexpected behavior with protocols. Stripping
> > out extraneous details...
>
> > ;;;;;;;;;;;;;
> > (ns my.ns1
> > ...)
>
> > (defprotocol pro-1
> >  ...)
>
> > (deftype T1 [...]
> >    pro-1
> >    ...)
>
> > (defn fun [p]
> > ^{:pre [(satisfies? pro-1 p)
> >        ]
> >  }
> >  ...)
> > ;;;;;;;;;;;;;;;;
> > Then in another file:
> > (ns my.ns2
> >     (:use [my.ns1]))
>
> > (deftype T2 [...]
> >          pro-1
> >          ...)
>
> > ...
> > ;;;;;;;;;;;;;;;;;;;;;;;;;
> > Then in a third file
> > (ns my.ns3
> >    (:use
> >     [my.ns1]
> >     [my.ns2]))
>
> > (defn ...
> >  (let [x (T2. ...)
> >      ]
> >      ...
> >      (fun x)
> >      ...))
>
> > This throws an error saying that 'x' does not satisfy the protocol.
>
> > Looking at the documented source of 'satisfies?', I see that this
> > amounts to asking
> > (instance? (:on-interface pro-1) x), which => false.
>
> > (:on-interface pro-1) => my.ns1.pro_1
>
> > but (class x) => T2 and (supers T2) => #{my.ns1.pro_1
> > java.lang.object}
>
> > Also, just to check (instance? T2 x) => true.
>
> > What am I not getting here? How can x be an instance of T2 and not be
> > an instance of one of its supers?

-- 
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