Rayon's fold wants a function which produces an identity element, rather than a single base element. In your case, if AMove is Copy + Send + Sync , simply doing moves.par_iter().fold(|| the_move, accumlator) should be good enough.

If AMove is not Copy , use || the_move.clone() .

Rayon may want to produce multiple identity elements to do different chunks in parallel and only merge the results at the end, that's why it needs be able to produce as many identity elements as it needs.

Check fold 's signature. Furthermore, if your accumulator returns the same type as the identity element, you probably want to use reduce instead (see linked docs for differences).

A different problem is that you can't use recursive closures the way you're trying to (Rust just can't do that). Use a named function for your accumulator instead.