oleg and friends claim to have disproven the 'pick two' thing. See their 'Stream Fusion, to Completeness' paper [1], and the associated Strymonas library [2].
That's not what I recall. Having a quick reskim, I don't believe they can handle the shared mutability in `F(S(X), X)`, so would end up duplicating the work to generate the elements of `X`. This problem looks unavoidable to me; if you are computing `f(x[n], x[2*n])` you need both points in memory simultaneously.