HaloO,

Paul Hodges wrote:
so back to foo("bar"). What's the default behavior? String doesn't Num,
does it? though is does convert if the value is good....

I think that Str and Num are disjoint mutually exclusive types.
If you want to get coercive behaviour you need an overloaded
&foo:(Str|Num) that handles conversions and redispatches.


Does that mean foo("123") should or should not dispatch to foo(Int)?
Or even foo(Num), for that matter.... Oy, I could see some headaches
around setting these rules in mind, lol.... What's the DWIMmiest
behavior hear?

I strongly believe that foo("123") should never *dispatch* to
&foo:(Int). The best in dwimmery would be an auto-generated
&foo:(Item) that handles coercions. Would that be switchable
by a 'use autocoercions' or so?


I assume foo(1) would dispatch to foo(Int) rather than foo(Num), as the
most restrictive fit, and I could see how that could blow up in my
face. Is there some basic compile time warning (and a way to tell it
"shut up, I know what I'm doing") that says "hey, these are
suspiciously close signatures, are you sure this is what you wanted?"

Last time I checked the subtyping of Perl6 was set-theoretic. That means
to me that Int is a strict subset of Num along the lines of

  subset Int of Num where { .frac == 0 }

Note that Num might be implemented as a subclass of Int that adds the
fractional part! But subclassing is not subtyping.
--

Reply via email to