The non-caching behaviour of iterate when used as a generator is not documented and counter-intuitive. It should be documented, just like it's documented for e.g. eduction.
Even though the docstring for iterate requires f to be side-effect free, f might take a long time to compute, in which case users should be wary that the computation might happen more than once.