From memory I solved it using more CPS and currying. Well manually currying with functions like curry1, curry2, etc...
Although I'm pretty sure you can overload the Fn* traits to implement currying in Rust. (Fn traits are unstable). Which is neat.
// Something like this:
impl<F, A, B, R> (FnOnce(A) -> Curry<F, A, B>) for F
where F: FnOnce(A, B) -> R,
{ ... }
// and
impl<F, A, B, R> (FnOnce(B) -> R) for Curry<F, A, B>
where F: FnOnce(A, B) -> R
I think I got it working... but you would need some work for more arguments. (And it worked different on different versions of rust-nightly :/)