I think an appropriate definition of abstract is one that is complementary to concrete. For then a type y is concrete if, and only if, there exists an object x such that its concrete type \text{typeof}(x) is equal to y. For example,
julia> x = [1.0]
1-element Array{Float64,1}:
1.0
julia> y = Array{Float64,1}
Array{Float64,1}
julia> typeof(x) == y
true
Then, since there is no x such that \text{typeof}(x) = \text{Array}, Array
is an abstract parametric type. Ptr
is the same.
So then, in line with the manual, Abstract types (such as singleton types and abstract parametric types) may have instances but not “instantiations”. This almost rescues my definition because instances of abstract types are allowed even though instantiations are not!
original definition
But, in the end, I think the singleton types example means that I have to weaken the definition slightly
singleton type example
We arrive at:
Definition : Object x is an instance of the abstract type y if, and only if,
- the concrete type t_x of x and the value v_y of y satisfy t_x<:v_y, or
- y is a singleton type and x is its instance (can be verified using
isa
) - …