Thanks! This seems obvious now just looking at it, but it was stumping me.
I might add for someone that may see this later, in the future it *might* not be needed to do it this way, if all you really just want {Int | Float | Rat} as future versions are supposed to let us use methods in such constrained types if a method is present in all the types, like Cmp in this case, but I'm not sure if it clear that >1.18 will handle this particular case where it is only the same method signature if you note that the param type is the same as the method receiver type.