I’m pretty confused about the following dispatch behavior (Julia 1.1 and 1.2pre):
julia> foo(::Type{V}) where {V<:Vector} = @isdefined(V)
foo (generic function with 1 method)
julia> foo(Base.unwrap_unionall(Vector))
false
How can it be that we dispatch to foo, hence we’ve verified that V<:Vector, while simultaneously “not knowing what V is” since @isdefined(V) returns false?
This example seems fairly contrived, although I think its not hard to run into the effects of this (as I did) if you’re implementing custom printing for your types via e.g. specializing Base.show(io::IO, ::Type{MyType{Bar,Baz}}) where {Bar,Baz}, where you’ll get errors because Bar and Baz aren’t defined for the same reason as above.