# Vector of vectors supertype

**URL:** https://discourse.julialang.org/t/vector-of-vectors-supertype/88666
**Category:** General Usage
**Created:** [October 13, 2022, 1:59pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666 "2022-10-13T13:59:30Z")
**Posts on this page:** 5
**Page:** 1

<div class="post-metadata">

### Author: ![qassiov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qassiov/32/24470_2.png) [@qassiov](https://discourse.julialang.org/u/qassiov)
#### Post date: [October 13, 2022, 1:59pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666/1 "2022-10-13T13:59:30Z")

</div>

I would like to define a function that takes arguments of the type `Vector{Vector{Float64}}` but is also not restricted to just Float64s (e.g. it should also be able take arguments of type `Vector{Vector{Int64}}`).

However, if I try and define the function with a more generic type, like here:

```julia
julia> x = [[1.0, 2.0],[0.1, 0.2]]
2-element Vector{Vector{Float64}}:
 [1.0, 2.0]
 [0.1, 0.2]

julia> foo(v::Vector{Vector}) = return v
foo (generic function with 1 method)

julia> foo(x)
ERROR: MethodError: no method matching foo(::Vector{Vector{Float64}})
Closest candidates are:
  foo(::Vector{Vector}) at REPL[116]:1

```

This is because Vector{Vector} is not a supertype of Vector{Vector{Float64}}, despite Vector being a supertype of Vector{Float64}.

```julia
julia> Vector{Float64} <: Vector
true

julia> Vector{Vector{Float64}} <: Vector{Vector}
false

```

Is there a solution to this, or should I just stick to writing multiple functions for the ‘subtypes’ of Vector{Vector} that are relevant for my program?

---

<div class="post-metadata">

### Author: ![Sukera](https://avatars.discourse-cdn.com/v4/letter/s/ce7236/32.png) [@Sukera](https://discourse.julialang.org/u/Sukera)
#### Post date: [October 13, 2022, 2:01pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666/2 "2022-10-13T14:01:37Z")

</div>

> [@qassiov](#):
>
> ```julia
> julia> foo(v::Vector{Vector}) = return v
> foo (generic function with 1 method)
> 
> ```

Either

```julia
foo(v::Vector{<:Vector}) = return v

```

or

```julia
foo(v::Vector{Vector{T}}) where T = return v

```

---

<div class="post-metadata">

### Author: ![jling](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/jling/32/212909_2.png) [@jling](https://discourse.julialang.org/u/jling)
#### Post date: [October 13, 2022, 2:01pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666/3 "2022-10-13T14:01:59Z")

</div>

> [@qassiov](#):
>
> `julia> Vector{Vector{Float64}} <: Vector{Vector}`

julia types are invariant (except Tuple):  
[https://docs.julialang.org/en/v1/manual/types/#Parametric-Abstract-Types](https://docs.julialang.org/en/v1/manual/types/#Parametric-Abstract-Types)

```julia
julia> Vector{Vector{Float64}} <: Vector{<:AbstractVector}
true

```

btw, idk what field of research/computing you’re in, but if this gets large, you might want to consider:

> **[GitHub - JuliaArrays/ArraysOfArrays.jl: Efficient storage and handling of...](https://github.com/JuliaArrays/ArraysOfArrays.jl)**
>
> Efficient storage and handling of nested arrays in Julia - GitHub - JuliaArrays/ArraysOfArrays.jl: Efficient storage and handling of nested arrays in Julia

---

<div class="post-metadata">

### Author: ![qassiov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qassiov/32/24470_2.png) [@qassiov](https://discourse.julialang.org/u/qassiov)
#### Post date: [October 13, 2022, 2:04pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666/4 "2022-10-13T14:04:13Z")

</div>

Thank you so much! I needed to be more familiar with the syntax for type selectors for this one…

---

<div class="post-metadata">

### Author: ![qassiov](https://sea2.discourse-cdn.com/julialang/user_avatar/discourse.julialang.org/qassiov/32/24470_2.png) [@qassiov](https://discourse.julialang.org/u/qassiov)
#### Post date: [October 13, 2022, 2:05pm UTC](https://discourse.julialang.org/t/vector-of-vectors-supertype/88666/5 "2022-10-13T14:05:24Z")

</div>

That is very useful to know about, thank you.
