First, Rats aren't FatRats and vice-versa. (If we need to discuss why, we'll need to start with Larry's comment that
"we've intentionally steered clear of any sort of numeric tower"; and then dig into what p6curious meant when they followed that up with "its one of the things that has impressed me the most about perl6"; and then consider Rats and FatRats in particular.)
Second, P6 has a nice feature that directly addresses this. It has been implemented for routine parameters but not yet `my` declarations:
sub fails-if-passed-Rat (FatRat $r) { say WHAT $r } ;
sub works-if-passed-number (FatRat() $r) { say WHAT $r } ;
fails-if-passed-Rat 1.0 ; # typecheck failure
works-if-passed-number 1.0 ; # coerces 1.0 to a FatRat
my FatRat $r = 1.0 ; # typecheck failure
my FatRat() $r = 1.0 ; # should say "not yet implemented"