Dict{Real, Int64}<:Dict{Union{T, Array{T, 1}}, Int64} where T<:Real
yields false?
Secondly, I am able define the following two types,
Dict{Tuple{Union{Array{T,1}, T}, T} where T<:Real, Int64}
Union{Dict{Tuple{Array{T, 1}, T} where T<:Real , Int64}, Dict{Tuple{T, T} where T<:Real , θλbuffer}}
Can someone help me understand the difference?
Thirdly, is there any difference between Dict{Real, Int64}<:Dict{Union{T, Array{T, 1}}, Int64} where T<:Real
and Dict{Real, Int64}<:Dict{Union{T, Array{T, 1}} where T<:Real, Int64} ?
Because of the type invariance. Dict{Real, Int64} type does not allow Array keys, while all rhs types do.
Dict{Real, Int64}<:Dict{S, Int64} where S<:Union{T, Array{T, 1}} where T<:Real
is true, as expected.
The first is a concrete type - dictionaries whose keys are tuples of values etc. The second is a union of two concrete types - one is dictionaries whose keys are (array, number) tuples, another is dictionaries whose keys are (number₁, number₂) tuples.
In terms of their values, there is no difference, both are false. Rhs’s are different, though.
An instance of Dict{Union{T, Array{T, 1}} where T<:Real, Int64} may have mixed Int, Float64 and other Real keys, and also arrays thereof. And Dict{Union{T, Array{T, 1}} where T<:Real, Int64} is a concrete type. Dict{Union{T, Array{T, 1}}, Int64} where T<:Real is UnionAll type, it is not concrete.