# Function that takes vector of parameterically typed values

Let us consider the following types

``````abstract type A end
struct A1 <: A end
struct A2 <: A end

struct B{T<:A}
type::T
end
``````

Now what I want to do is write a function as narrowest as possible that accepts both `vec1` and `vec2` below

``````b1 = B(A1())
b2 = B(A2())
vec1 = [b1, b1]
vec2 = [b1, b2]
``````

My first attempts was defining function like

``````sample1(vec::Vector{B}) = ()
``````

but it fails to accepts `vec1` because `vec1`'s type is `Vector{B{A1}}` and `Vector{B{A1}} <: Vector{B}` is false. Then, my second attempt was like

``````sample2(vec::Vector{B{T}}) where T <: A = ()
``````

but this function fails to accept `vec2` as `Vector{B} <: (Vector{B{T}} where T<:A)` is false.

How should I define a function that accepts `vec1` and `vec2`?

Have you tried the following?

``````sample(vec::Vector{<:B}) = ()
``````

Edit: no, I’m afraid that would not work actually it does work, I don’t know whether this is as narrow as you would like it though.

1 Like