On May 31, 2013, at 1:28 PM, Frank Shearar <frank.shearar@gmail.com> wrote:
On 31 May 2013 12:01, Damien Cassou <damien.cassou@gmail.com> wrote:
Hi Frank,
On Wed, May 29, 2013 at 11:45 PM, Frank Shearar <frank.shearar@gmail.com> wrote:
I have a Trait TGroup that requires #*, #identity and #inverse. I want to construct a TField by composing TGroup with itself. One TGroup will form the operations #*, #one, and #reciprocal while the other will form #+, #zero and #negated.
I don't want #identity or #inverse, because these apply to one operation, and it makes TField's API ambiguous. That's what TraitExclusion is for.
maybe a diagram would help
In explaining the problem, or an an alternative to the crazy composition? I rather think that this - which doesn't work, and prompted the question in the first place - is rather readable... _and executable_:
(TGroup @ {#* -> #+. #inverse -> #negated. #identity -> #zero} + TGroup @ {#inverse -> #reciprocal. #identity -> #zero}) - {#identity. #inverse}
What I don't understand is (a) why exclusion only applies to the rightmost trait in the composition and (b) why aliases either break (in Pharo [1])
do they?
or do nothing (in Squeak), where I'd expected to see implementations saying "self requirement".
we removed self requirement because it was slow to compute in interactive mode.
frank