http://david-mcneil.com/post/1475458103/implementation-inheritance-in-clojure
Luc P.
--
Luc P.
================
The rabid Muppet
> On Sun, 28 Aug 2011 14:19:46 -0400
> Alexandre Patry <patr...@iro.umontreal.ca> wrote:
> Some reading:
>
> http://david-mcneil.com/post/1475458103/implementation-inheritance-in-clojure
Thanks for the quick answer.
From what I understand, this article talks about inheritance of implementation. I would like inheritance of "specification", like :
(defprotocol State
(precede? [this other-state])
(completed? [this]))
(defprotocol Hypothesis
;; Here, I would like to specify that an hypothesis must implement the State protocol
;; but also the value and successors functions
(successors [this])
(value [this]))
It would be simple interface inheritance in java, but I do not know how to express it in clojure.
>
> Luc P.
>
>> Hi,
>>
>> I would like to define a protocol as a super set of another. For
>> example:
>>
>> (defprotocol P1
>> (f [this]))
>>
>> (defprotocol P1WithExtras
>> ;; something like :extends P1
>> (g [this]))
>>
>> ;; P1WithExtras should now contain f and g.
>>
>> I may have missed, but I did not find how to do it from the
>> documentation.
>>
>> Any suggestions on how to define a protocol as a superset of another?
>> Or on an alternative solution?
>>
>> Thanks,
>>
>> Alexandre
>>
>
>
>
> --
> Luc P.
>
> ================
> The rabid Muppet
>
> --
> 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
"If you are used to Java style type inheritance you might be surprised that there is no explicit record/protocol mechanism for defining one type as a “sub-type” of another and inheriting the super-type’s implementation. You might even think that Clojure datatypes are less powerful than Java clasess… but you would be wrong."
So to summarize, there's no protocols/defrecord inheritance. The article provides an example
how to you can override implementations of an existing protocol (extend TrainedDog (merge base-behavior ...)
from another protocol to change them. It's not inheritance, it's overriding implementations.
Luc P.
On Sun, 28 Aug 2011 14:42:46 -0400