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.
