OK, I see. You corrected me with something I didn’t get right before, thank you.
But then I have other concerns.
I was one of the author of the Y combinator in Rosetta Code. When I was working on this I noticed that Rust have something that other languages does not, namely in this case, the distinguish of Fn, FnMut and FnOnce and I feel like this is a good thing.
However I figured out later that I can only use Fn in a fixed point combinator and we have a very good reason: an FnOnce can be called only once, so no recursion will happen to it. An FnMut have a mutable reference to itself when called, and in Rust you cannot keep another mutable reference for later calls.
Until recently I noticed that we are able to have closures that are FnOnce + Clone, and then I can relax the restriction from only Fn to FnOnce + Clone.
However, in today’s stable rust we are not able to constraint on both Fn and FnOnce + Clone, as they are overlapping sets. Of cause, I know we can use nightly and enable a feature to make it possible, but I just feel like it seems not making any sense to have an Fn that is not Copy.
If Fn implies FnOnce + Copy, I can simply write the code in today’s Rust and have constraint on FnOnce + Clone. So this is why I am asking here.