Avatar
omochimetaru 9/4/2018 4:06 AM
提案を読み直した
4:06 AM
面白かったところ opaque result型はそれ自身がプロトコルに準拠できる func foo<C: Collection>(_ : C) { } foo(c) // okay: unlike existentials, opaque types work with generics
4:07 AM
返り値のopaque result型のconformanceを、ひとまとめにシグネチャだけオーバーロード(?)できる extension BidirectionalCollection { public func reversed() -> opaque BidirectionalCollection where _.Element == Element where Self: RandomAccessCollection -> _: RandomAccessCollection where Self: MutableCollection -> _: MutableCollection { return ReversedCollection<Self>(...) } }
4:08 AM
↑は3つのシグネチャが同時に書かれていて、 Selfによって、opaque resultが BidirectionalCollectionか、 RandomAccessCollectionか、MutableCollectionか、変わる