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
?