About functions that actually take the same types (which means they are
operating on types they they didn't define themselves), I think the new
approach in 0.4 (give a warning and don't merge in the "new" meaning) is
correct.
I would not like to see that change to have the ambiguity only resolved /
warned about at run-time.
I've said all along, I'm only talking about cases where there is no
ambiguity...
Package A defines TypeA, and all of it's exported functions always have
TypeA in their method signature (even if it's only `::Type{TypeA})`. Say
it has a "connect(db::TypeA, ipaddr, port)" method...
Package B defines TypeB, (same as above), Why should it not be able to
also define a "connect(db::TypeB,datasetname:UTF8String)"?
Scott
On Friday, May 15, 2015 at 9:13:11 AM UTC-4, Michael Francis wrote:
>
> @Scott, @Toivo
>
> In my mind this changing the meaning of existing code is happening all the
> time with the verbs in Base. Each time I use a module it can (and likely
> does) inject new behavior for verbs defined in Base ( or for verbs defined
> in any other module) These silently change the way other modules work.
> This is actually the beauty of the type system as it allows a module to add
> features to another module without having to fork the module. The only
> thing you can't do is add new verbs to an existing module.
>
> Is that not the case ?
>
>
> On Friday, May 15, 2015 at 8:08:51 PM UTC+10, Scott Jones wrote:
>>
>>
>>
>> On Thursday, May 14, 2015 at 3:13:09 PM UTC-4, Toivo Henningsson wrote:
>>>
>>> I don't think it should be allowed. What if two packages try to add
>>> functions with the same name to Base that do completely different things?
>>> And what if they are both applicable to some of the same argument types?
>>>
>>
>> As long as there is no ambiguity in the types, why should they not be
>> able to?
>> That is *way* too restrictive...
>>
>
> Because if some module adds an ambiguous type it will silently change the
> meaning of existing code.
>
>
>>
>>
>>> Beyond that, I think being able to add definitions to a module from the
>>> outside comes with an extra set of problems. What if you define a function
>>> that shadows a function that it was using from another module? What if
>>> there was a big where someone was trying to access a function from another
>>> module that wasn't there, but is was named because the function had been
>>> introduced from the outside?
>>
>>
>
>