in 0.6, the following code is fine:
julia> foo(::AbstractVector{E}, ::NTuple{2, E}) where E = true # A
julia> foo(::AbstractVector{E}, ::NTuple{2, <:Any}) where E = false # B
julia> foo([1, 2], (3, 4))
true
However, in 0.7 it leads to method ambiguity:
# same functions declared
julia> foo([1, 2], (3, 4))
ERROR: MethodError: foo(::Array{Int64,1}, ::Tuple{Int64,Int64}) is ambiguous. Candidates:
foo(::AbstractArray{E,1}, ::Tuple{#s1,#s1} where #s1) where E in Main at REPL[22]:1
foo(::AbstractArray{E,1}, ::Tuple{E,E}) where E in Main at REPL[21]:1
Possible fix, define
foo(::AbstractArray{E,1}, ::Tuple{#s1,#s1} where #s1<:E)
Stacktrace:
[1] top-level scope at none:0
I’m also not sure I get it: the first method (A) seems like it should always be more specific, even if the tuple elements are a subtype of the array elements.