# This part is the struct's where clause.
# U written first because T<:Foo{U} depends on U
# vvvvvvvvvvvvvv
struct Baz{U, T<:Foo{U}} <: Foo{U}
baz :: U
end
where {T<:Foo{U}} where U is equivalent to where {U, T<:Foo{U}}, it’s just you need to write it like the latter because you can’t write where, let alone chains of them, in a struct definition’s where clause. You can write where in iterated union types annotating the fields, though.