zayac/EqCode — comment on commit 69d4e5b432afb35800cd03216eb43cc641fbd0c9
File: docs/misc/stream-operators.txt line 28
By zayac:

Не думаю, что стоит разделять потоки. Все потоки имеют внутреннее состояние. В целом, так же можно обеспечить ко всем потокам произвольный доступ.
1. Пусть имеется поток, заданный формулой. Очевидно, мы можем получить доступ к произвольному элементу, т.е. в этом случае поток "раскрутится" с начального до требуемого состояния. При очередном таком же произвольном доступе нет других вариантов, кроме как раскрутить этот поток заново. В этом же состоянии мы можем получить доступ к следующему состоянию(элементу) применив функцию next, при условии, что в каждом состоянии мы храним "окно", необходимое для вычисления заданного элемента. В этом случае, следующий элемент получается сдвигом окна. Так же должно быть понятно, почему нельзя применить функцию prev.
2. Могут быть другие потоки, например, файловые. Здесь также есть состояния. Можно считать, что состояния определяются файловым итератором. Произвольного доступа в естественном виде у них нет. Но мы можем "считать" позицию в файле, тем самым реализовав seek в файле.

В общем, я думаю, что все потоки имеют состояния, и ко всем потокам также можно применить произвольный доступ (работающий за O(n)).