I have these structs:
struct A{T}
n::T
end
struct B{T,N}
n::T
m::N
end
C{K} = B{T,N} where {T,N<:A{K}} where {K}
a1 = A(1)
a2 = A(1.0);
Then I construct a Vector:
vec1 = [B(1, a1), B(1, a1)]
2-element Vector{C{Int64, Int64, A{Int64}}}:
C{Int64, Int64, A{Int64}}(1, A{Int64}(1))
C{Int64, Int64, A{Int64}}(1, A{Int64}(1))
As can be seen vec1’s element type is C{Int64, Int64, A{Int64}}.
Then, I construct aother Vector:
vec2 = [B(1, a1), B(1, a2)]
2-element Vector{B{Int64}}:
C{Int64, Int64, A{Int64}}(1, A{Int64}(1))
C{Float64, Int64, A{Float64}}(1, A{Float64}(1.0))
There vec2’s element type is B{Int64}. But the all elements of vec2 is C, so I thought the vec2’ elemnt type is C, and the type of vec2 is Vector{C}
I thought there must be some order rules on type aggregating? The order thoughts B{Int64} is “more concrete” than C, so the result is Vector{B{Int64}} rather than Vector{C}?
Is there a way I can append a method, then whenever I run vec2 = [B(1, a1), B(1, a2)], the result will automatically transformed to Vector{C} ?