Type instability issue with parameterizable struct and tuples

do it this way

struct Foo{T}
    buffer::Vector{Complex{T}}
end

 function Foo(::Type{T}, num_samples) where {T}
     Foo(Vector{Complex{T}}(undef, num_samples))
 end

function foos(::Type{T}, states, num_samples) where {T}
    map(y -> map(x -> Foo(T, num_samples), y), states)
end

function foos(states, num_samples)
    foos(Float32, states, num_samples)
end

then

julia> @code_warntype foos(([1],), 10)
MethodInstance for foos(::Tuple{Vector{Int64}}, ::Int64)
  from foos(states, num_samples) @ Main REPL[9]:1
Arguments
  #self#::Core.Const(foos)
  states::Tuple{Vector{Int64}}
  num_samples::Int64
Body::Tuple{Vector{Foo{Float32}}}
1 ─ %1 = Main.foos(Main.Float32, states, num_samples)::Tuple{Vector{Foo{Float32}}}
└──      return %1
2 Likes