# How to interpret "Type{T} where T" in Julia's type system

**URL:** <https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402>\
**Category:** New to Julia\
**Tags:** question, type, parametric-types\
**Created:** [April 11, 2020, 4:24pm UTC](https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402 "2020-04-11T16:24:34Z")\
**Posts on this page:** 3\
**Page:** 2

<div class="post-metadata">

**Author:** ![Benny](https://avatars.discourse-cdn.com/v4/letter/b/49beb7/32.png) [@Benny](https://discourse.julialang.org/u/Benny)\
**Post date:** [April 4, 2025, 2:39pm UTC](https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402/21 "2025-04-04T14:39:07Z")

</div>

I would agree that “all concrete types are final” is poor wording and implies that it’s a leaf node on the subtyping tree, which is not true. My current mental model is that with the exception of `Type{T}` and unions thereof subtyping `DataType`, `Union`s making ad-hoc supertypes, and `Union{}` subtyping every type, we DO have a type tree with concrete leaf nodes and abstract nodes otherwise, and this is what most of the reflection methods will cover. Is that accurate, and if so would it be helpful?

---

<div class="post-metadata">

**Author:** ![Sevi](https://avatars.discourse-cdn.com/v4/letter/s/c67d28/32.png) [@Sevi](https://discourse.julialang.org/u/Sevi)\
**Post date:** [April 5, 2025, 2:53pm UTC](https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402/22 "2025-04-05T14:53:34Z")

</div>

> [@Benny](#):
>
> with the exception of `Type{T}` and unions thereof subtyping `DataType`, `Union`s making ad-hoc supertypes, and `Union{}` subtyping every type, we DO have a type tree with concrete leaf nodes and abstract nodes otherwise

I don’t know whether this is accurate, but it’s also my current mental model (and why it’s still fine for a lot of code in practice to think about a “type tree” in my opinion).

* * *

Following @nsajko’s suggestion I just made a PR to suggest a small addition to the manual page: [Documentation: Add notes about subtypes of concrete types by angerpointnerd · Pull Request #58017 · JuliaLang/julia · GitHub](https://github.com/JuliaLang/julia/pull/58017)

---

<div class="post-metadata">

**Author:** ![Sevi](https://avatars.discourse-cdn.com/v4/letter/s/c67d28/32.png) [@Sevi](https://discourse.julialang.org/u/Sevi)\
**Post date:** [April 7, 2025, 6:45am UTC](https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402/23 "2025-04-07T06:45:02Z")

</div>

FYI: The PR linked directly above was merged!

It doesn’t include an explicit statement about the “tree-ness” of the type graphs in the absence of `Type{T}` and `Union{}`, mostly because as @nsajko demonstrated you can still interconnect individual branches using regular `Union`s.

But I hope it makes the point clearer that `Type{T}` and `Union{}` are (apparently the only) exceptions to "concrete types cannot have subtypes. The manual now hopefully provides more clarity for answering the original question of this topic (which I just now realized is almost exactly 5 years old already 😅 🙈 But evidently it was still a relevant question 😉 )

[Previous page](https://discourse.julialang.org/t/how-to-interpret-type-t-where-t-in-julias-type-system/37402.md?page=1)
