What is happening is that Rust is choosing the lifetimes to be different that what is shown.
When you swap the parameters, you are changing the problem entirely. Also, you should note that lifetimes no longer correspond to lexical scopes, they correspond to invisible scopes that are determined by when values are used.
The statement that
<'a: 'b, 'b> reads as lifetime 'a is at least as long as 'b .
is true, and is necessary for correctness. If you would like to see an example of how this comes up in a more visible, but more complex and niche way, see my answer here
Thanks @RustyYato. This is a key concept I was missing:
lifetimes no longer correspond to lexical scopes, they correspond to invisible scopes that are determined by when values are used.
I appreciate your response in the other thread too. Will need to refer back to it as my studies continue. Bonus for your use of a Hitchhiker's Guide to the Galaxy reference