So Rust really only has 2 variances: variant and invariant. I realize fn() has contravariance (at least based on nomicon) but it seems to me it has nothing to do with borrows at all. Nomicon says it’s used for trait method selection and doesn’t elaborate. I’m frankly not sure what the story is on it. I do know that fn() cannot hold any references which includes closures coerced to it. So my intuition on it is that it’s like a String in that regard.
Yeah, bad choice of terminology on my part. What I really wanted to convey is that the fn has no state captured and the 'a is a bound on the lifetime of args given to it.