Array{Array{<:Real,1},1}
is an array of arrays, where each sub-array might have a different element type. But I think that’s likely to be kind of confusing, so let’s simplify with some helpful names. I think you’ll agree that your initial argument type could be written as:
julia> A = Array{<:Real, 1}
Array{#s2,1} where #s2<:Real
julia> B = Array{A, 1}
Array{Array{#s2,1} where #s2<:Real,1}
The type of fill(Float64[], 10)
is:
julia> typeof(fill(Float64[], 10))
Array{Array{Float64,1},1}
So we can rewrite that as:
julia> C = Array{Float64, 1}
Array{Float64,1}
julia> D = Array{C, 1}
Array{Array{Float64,1},1}
An array of floats is a subtype of Array{<:Real}
:
julia> C <: A
true
But that doesn’t mean that Array{C, 1} <: Array{A, 1}
:
julia> Array{C, 1} <: Array{A, 1}
false
for exactly the same reason that:
julia> Array{Float64, 1} <: Array{Real, 1}
false