if you have many many impls like impl Foo for Type1 impl Foo for Type2 impl Foo for Type3 impl Foo for Type4 ... the compiler has to check they don't overlap