I think that cycling needs to cache values in the event that the cycled iterator is single-pass. With collection types It may also provide speed gains (presumably the cache would be an array, which may be faster than other collection types).
Also, should we have a single thread on duplicating all of Python's itertools
functionality? The discussion seems like it's arising naturally, and it would probably be best if all the functionality to be added were worked on in sync to achieve a uniform IterKit
™ API. If the functions are added one by one, then they may each achieve their individual goals well but together comprise a crummy module.