moving the use of AbstractString from the types of the arguments to become 
a type parameter fixes baz
changing AbstractString to ASCIIString without moving anything also works

zab{T<:AbstractString}(a::Vector{Tuple{T,T}}) = 4
zab(a::AbstractString) = zab([(a,a)])
zab("a")
4

zab(a::Vector{Tuple{ASCIIString, ASCIIString}}) = "four"
zab(a::AbstractString) = zab([(a,a)])
zab("a")
"four"





 

On Tuesday, August 11, 2015 at 1:26:24 PM UTC-4, Seth 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