I don’t think punning is bad, who is to say the Base
is the right term and anything else a pun?
I also think that methods should be allowed to merge , reduce
can mean related but different things defined in different modules , which have no interest in extending each other because they are unaware of each other.
We can qualify everything, but I prefer to just “merge” the functions and be notified if a specific use failed to resolve unambiguously.
The problem I see with extending methods in other modules , is specifically related to binary cache. I’ll explain:
Lets say you want to save all of your compiled code, to avoid re-jitting over and over again, this is crucial when developing large amounts of code…or when importing a package that represent a lot of code.
This is possible only if you can guarantee that your cache would behaves the same if read from cache and if it was just now compiled.
When you are adding a method to a module , you immediately invalidate the binary cache for that module.
If that module is Base, you would probably invalidate the entire cache.
This reason alone gives me big incentive to come up with a formality that still allows multiple dispatch which ?I love but in which it is not so easy to invalidate the entire binary cache.
binary cache: in C/C++ this would be the .o files in the build dir.
Type Piracy:
try this
import Base.+
+(a::Int64,B::Int64) = "Pirate!"