Is it correct to say that:

baz(a::Vector{Tuple{AbstractString, AbstractString}}) = 3

is uncallable, since we can't instantiate an AbstractString? Maybe it 
should trigger an error/warning on definition.

Cédric

On Tuesday, August 11, 2015 at 4:18:38 PM UTC-4, Stefan Karpinski wrote:
>
> Same thing – even though
>
> Tuple{ASCIIString,ASCIIString} <: Tuple{String,String} <: Tuple
>
>
> due to invariance, we still have these:
>
> !(Vector{Tuple{String,String}} <: Vector{Tuple})
>
> !(Vector{Tuple{ASCIIString,ASCIIString}} <: Vector{Tuple})
> !(Vector{Tuple{ASCIIString,ASCIIString}} <: Vector{Tuple{String,String}})
>
>
> On Tue, Aug 11, 2015 at 4:13 PM, Seth <catc...@bromberger.com 
> <javascript:>> wrote:
>
>> Thanks, Stefan. I understand that causing the problem for baz(), but why 
>> does this explain bar()'s failure?
>>
>> On Tuesday, August 11, 2015 at 1:10:27 PM UTC-7, Stefan Karpinski wrote:
>>>
>>> Parametric typing in Julia is invariant, so
>>>
>>> !(Vector{Tuple{ASCIIString,ASCIIString}} <: Vector{Tuple{String,String}})
>>>
>>>
>>> even though
>>>
>>> Tuple{ASCIIString,ASCIIString} <: Tuple{String,String}.
>>>
>>>
>>> See: 
>>> http://docs.julialang.org/en/release-0.3/manual/types/#parametric-composite-types
>>>
>>> On Tue, Aug 11, 2015 at 1:26 PM, Seth <catc...@bromberger.com> wrote:
>>>
>>>> Consider
>>>>
>>>> foo(a::Vector) = 1
>>>> bar(a::Vector{Tuple}) = 2
>>>> baz(a::Vector{Tuple{AbstractString, AbstractString}}) = 3
>>>>
>>>>
>>>> foo(a::AbstractString) = foo([(a,a)])
>>>> bar(a::AbstractString) = bar([(a,a)])
>>>> baz(a::AbstractString) = baz([(a,a)])
>>>>
>>>> Results:
>>>>
>>>> julia> foo("a")
>>>> 1
>>>>
>>>> julia> bar("a")
>>>> ERROR: MethodError: `bar` has no method matching 
>>>> bar(::Array{Tuple{ASCIIString,ASCIIString},1})
>>>>  in bar at none:1
>>>>
>>>> julia> baz("a")
>>>> ERROR: MethodError: `bar` has no method matching 
>>>> bar(::Array{Tuple{ASCIIString,ASCIIString},1})
>>>>  in baz at none:1
>>>>
>>>> I understand why foo() works, but why do bar() or baz() both fail?
>>>>
>>>
>>>
>

Reply via email to