Naming question: Upper? bounded HRTB

Hi,

I needed an HRTB like this (not valid Rust, but I hope it can be understood):

T: for<'a where U: 'a> SomeTrait<'a>

To do so, I used an approach described in this article. It works for me, no problems there.

My question is: How to name this kind of HRTBs (e.g. in docs when explaining why some extra traits and generic parameters exist)?

So far I came up with following candidates:

  • Upper bounded (based on interpretation of lifetimes as durations and that the universal quantifier ranges over short enough lifetimes)
  • Lower bounded :slight_smile: (as the "outlives" relation is sometimes aligned with the "subtype" relation so we can pretend references are covariant, also X: Y is usually read in the Sub: Super direction of ordering, so the universal quantifier in the HRTB ranges over lifetimes that are "something like supertype" of U)
  • Outlived-bounded (my current preference, but it sounds weird) (because the U: 'a bound is actually read as U outlives 'a, so the universal quantifier ranges over lifetimes outlived by U)

... or is there anything better/already established? I do not remember reading anything on this topic ...

I've seen "where-clauses in binders".

If we're bike-shedding, perhaps "constrained HRTBs". I've used the term "conditional HRTBs" or "conditional binders", but... they're always HR/binders, so maybe that's not great.

If these are both supported:

for<'a where 'a: 'some_external_lifetime>
for<'a where 'some_external_lifetime: 'a>

"upper" or "lower" would be confusing and/or arbitrary.

I like this one.

I hoped for some well established name, so until some emerges I will use this one.

Thanks for suggestions.