Закрытие и вопрос о продолжительности жизни с более высоким рейтингом

Я экспериментирую с оценками более высокого ранга. В минимальном примере, который я создал, есть функция, использующая замыкание, которое принимает &str и возвращает &str того же времени жизни 'a. Я явно объявлял жизни по признаку Fn.

fn foo(_: &for<'a> Fn(&'a str) -> &'a str) {
}

fn main() {
    foo(&|s| s);
}

Это прекрасно работает. Если я аннотирую тип параметра в замыкании типа &str, я получаю ошибку времени жизни:

fn foo(_: &for<'a> Fn(&'a str) -> &'a str) {
}

fn main() {
    foo(&|s: &str| s); // explicitly specified parameter type
}

Это меня смущает. По нескольким причинам.

  • Не является ли тип возврата закрытого типа того же типа, что и параметр (с тем же временем жизни по времени жизни)?
  • Аргумент foo определяется количественно по всему возможному время жизни. Почему не может быть типом времени жизни произвольным? не 'a просто заполнитель для некоторого времени жизни?

Он работает без указания типа явно, но почему? Как отличаются эти две версии?

Детский макет