On May 31, 2013, at 1:28 PM, Frank Shearar <[email protected]> wrote:
> On 31 May 2013 12:01, Damien Cassou <[email protected]> wrote: >> Hi Frank, >> >> On Wed, May 29, 2013 at 11:45 PM, Frank Shearar <[email protected]> >> 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 > > [1] https://pharo.fogbugz.com/default.asp?10803#78542 >
