Avatar
omochimetaru 9/4/2018 4:12 AM
いや、これはもともと、 struct ReversedCollection<C: BidirectionalCollection>: BidirectionalCollection {...} extension ReversedCollection: RandomAccessCollection where C: RandomAccessCollection {}
4:12 AM
こういうふうにしてすでに実現できていた事なんだけど
4:12 AM
↑だったら、ReversedCollection側の conditional conformanceで対応できていたことが
4:13 AM
extension BidirectionalCollection { public func reversed() -> opaque BidirectionalCollection where _.Element == Element { return ReversedCollection<Self>(...) } } (edited)
4:13 AM
opaque化することで、 ↑このopaque BidirectionalCollectionが、 RandomAccessCollectionになることを記述できなくなるので
4:13 AM
extension RandomAccessCollection { public func reversed() -> opaque RandomAccessCollection where _.Element == Element { return ReversedCollection<Self>(...) } }
4:13 AM
冗長に↑も書かないといけなくなってしまう
4:13 AM
という言語機能のデグレが起きるので、 それをカバーするもの。