1/6

A closure implements one of three traits, and you do not choose — the compiler decides from what the body does with its captures.

| trait | body does | callable | | --- | --- | --- | | FnOnce | consumes a capture | once | | FnMut | mutates a capture | many times, needs &mut | | Fn | only reads captures | many times, from & |

They nest: every Fn is also FnMut, and every FnMut is also FnOnce. So bounding a parameter on Fn is the most restrictive thing you can ask for.