Values always have concrete types (by definition)—an object cannot have an abstract type (and in particular it cannot have a union type). A variable could be inferred to have a union type, but that’s just an implementation detail of the optimizer. Locations like fields in structures or slots in arrays can be abstractly typed, and that can be queried with fieldtype and eltype like so: