I was reading the RFC on "expanding" impl Trait when I came upon the following:
By contrast, a programmer who first learned:
fn take_iter(t: impl Iterator)
and then tried:fn give_iter() -> impl Iterator
would be successful, without any rigorous understanding that they just transitioned from a universal to an existential.
While I understand universal vs existential from a logic perspective, what makes the first one above universal and the second one existential?