`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
```