On Sat, Jan 2, 2016, at 11:17 PM, Brent Royal-Gordon wrote:
> > `buffered` is no more problematic than `lazy` is. In fact, calling 
> > `buffered` actually doesn't have any side-effects at all (it can avoid 
> > fetching the first element until you call `first` on the result of 
> > `buffered`).
> 
> If `seq` is a single-pass sequence, then `seq.buffered.first` will consume an 
> element from `seq`, even though you only accessed two properties. That's why 
> I call it problematic.
> 
> (If calling `buffered` somehow rendered the original sequence unusable—for 
> instance, if we had some way to express that the `BufferedSequence` takes 
> unique ownership of its base—this wouldn't bother me as much.)

If `sequence` is a single-pass sequence, wrapping it in any other sequence type 
and then doing anything with that other sequence type makes the original 
sequence unusable (or rather, you can still use it but the elements yielded 
from any further access to the original sequence can be completely arbitrary).

And for the record we already have precedent for the specific case of 
`seq.prop1.prop2` destructively consuming the original sequence: 
`seq.lazy.array`.

-Kevin Ballard
_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to