Matthew Walton writes:
> However, if I alter my operator overload to be
> 
> multi sub *infix:Â+Â (EvilNumber $lhs, EvilNumber $rhs) is deep { ... }
> 
> I get *infix:Â+=Â defined as { $lhs = $lhs + $rhs; } for free. Is that 
> right?

Yep.

> Also, would things blow up if I specified the return types for operator 
> overloads, such as
> 
> multi sub *infix:Â+Â (EvilNumber $lhs, EvilNumber $rhs) returns 
> EvilNumber is deep { ... }

In that case I don't see why it would blow up.  If you said, say:

    multi sub *infix:Â*Â (Vector $lhs, Vector $rhs) 
    returns Num is deep
    { ... }

Then you might get into trouble if you did 

    $u += $v

> Would that work, would it behave strangely and what would it do to the 
> definition of infix:Â+=Â which would be based on it? Is it even 
> necessary? Does it give me anything? And can I overload based on return 
> types?

I can't be sure, but I don't think that we're doing MMD on return types.
The most compelling reason for that is because you can get yourself into
paradoxes that way.

Luke

Reply via email to