The [] tries to create a vector of the smallest possible type, and with all f1 functions it can use this type. f0 is of a different type (as all functions are their own type) so it has to punt to the supertype. This is the same as:
On your second question you are probably looking for
julia> function foo(v::Vector{<:Any})
println("foo with Vector{Any}")
end
foo (generic function with 3 methods)
julia> foo([f1(0.0f0),f1(1.0f0)])
foo with Vector{Any}
(unrelated, but it’s very helpful to enclose your code in triple backticks ``` to make it more legible and ensure quotation marks are faithfully represented)