Функция Хаскелла flip определяется следующим образом:
flip :: (a -> b -> c) -> b -> a -> c
flip f x y = f y x
Все, что он делает, это берет функцию и возвращает другую функцию, у которой два параметра обращены. Если бы вы вызвали функцию f
как f a b
(f(a, b)
в Rust-подобном синтаксисе), вы бы назвали flip f
как (flip f) b a
.
Моя неудачная попытка написать это в Rust:
fn flip<A, B, C, F: Fn(A, B) -> C>(f: F) -> impl Fn(B, A) -> C {
|a, b| f(b, a)
}
Можно ли написать это в Rust?