This is in the Julia FAQ. There are many discussions that try to help explain this. See e.g.
- Problem with Complex{Rationals} - #7 by stevengj
- Why [1, 2, 3] is not a Vector{Number}? - #19 by stevengj
- Why [1, 2, 3] is not a Vector{Number}? - #28 by StefanKarpinski
I guess you are asking specifically about As noted by @nsajko below, the bottom type Vector{<:Float64}
. Realize that Vector{<:T}
for any type T
is a set of types: Vector
types for any subtype of T
. Now, I guess your point is that, since Float64
is concrete, it has exactly one subtype Float64
, so Vector{<:Float64}
is a set containing only one element, Vector{Float64}
. Still, in mathematics we generally don’t equate a set of a single element with that element: \{x\} \ne x.Union{}
is a subtype of Float64
, so Vector{Union{}} <: Vector{<:Float64}
.