On Dec 7, 2010, at 11:10 PM, Matthew D. Swank wrote: > On 12/07/2010 09:19 PM, Faré wrote: >> A better question might be >> how do you enforce disjointness of some mixins. I suppose a >> heavy-handed use of MOP magic could do it, but oh well. > Q: Doctor, it hurts when I do this. > A: Well, don't do that. > > In the examples I looked at that inspired me to use IPS (<map> might > have been one), sets of mixins partition (part of) a default > implementation, and most of methods specialize only on interface types. > As a whole, the parts of the protocol implemented by a set of mixins > depend only the unimplemented generic functions, and not on any > particular datatype. Kinda a Ruby Module-y, Smalltalk Trait-y sort of > thing. >
This is how I use mixins, too -- as "trait"-y sort of things that provide implementation of a protocol, but don't "contribute" to the type. That is, there is a single-inheritance "backbone" that may, or may not, have implementations of the protocol(s), and zero or more mixins that provide bits of implementation. I tend to avoid having mixin classes provide any public slots, although there may be internal slots to aid in the implementation. Just my two cents... _______________________________________________ pro mailing list [email protected] http://common-lisp.net/cgi-bin/mailman/listinfo/pro
