No, the syntax really isn’t the core of the issue here. A Vector{Integer}
is a real type, and one you might even use at some point, it’s just that [1, 2, 3]
doesn’t give you one.
A Vector{Integer}
is a vector in which every element can be a (potentially different) subtype of Integer
:
julia> x = Vector{Integer}()
Integer[]
julia> push!(x, 1)
1-element Array{Integer,1}:
1
julia> push!(x, big(2)^big(100))
2-element Array{Integer,1}:
1
1267650600228229401496703205376
This is different from Vector{Int64}
in which every element is exactly the concrete type Int64
. It’s also different from Vector{<:Integer}
which is a set of types describing any Vector
whose element type is any subtype of Integer
. Vector{Int64}
and Vector{Integer}
are both members of that set:
julia> Vector{Int64} <: Vector{<:Integer}
true
julia> Vector{Integer} <: Vector{<:Integer}
true
but they have no relationship to one another otherwise:
julia> Vector{Int64} <: Vector{Integer}
false