Я пытаюсь написать функцию, которая каррирует функцию двух переменных, в функцию-функцию с одной переменной.
Когда все используемые типы просты, проблем нет:
fn curry1(f: fn(i32, i32) -> i32) -> Box<Fn(i32) -> Box<Fn(i32) -> i32>> {
Box::new(move |x| Box::new(move |y| f(x, y)))
}
Как только я пытаюсь сделать любой из параметров универсальным, у меня возникают проблемы со временем жизни, которые я не могу решить:
fn curry2<Z>(f: fn(i32, i32) -> Z) -> Box<Fn(i32) -> Box<Fn(i32) -> Z>> {
Box::new(move |x| Box::new(move |y| f(x, y)))
}
the parameter type Z may not live long enough to satisfy its required lifetime bounds
Как правильно описать и аннотировать соответствующие времена жизни?