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