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?