Did you meant extension Collection
?
// Should this name exist?
let _: Array<Int>.ABC
// Yes it should
// Or should you refer to it like this?
let _: Collection.ABC
// (In current example) Only if `Array<Int>` would have it's own `ABC` that would win, otherwise you can use the above as a shortcut
// What about this?
// If not, would it be okay for BDC to define its own type called 'ABC'?
let _: BidirectionalCollection.ABC
// DBC can define a custom `ABC` time that would win and it would require you to use `Collection.ABC` if you want to access parents `ABC`
Local type with a colliding name always wins:
struct Foo {}
extension Collection {
typealias A = Foo
}
struct Test {}
extension Array {
typealias A = Test
}
let _: Array<Int>.A // Test
let _: BidirectionalCollection.A // Foo
I picked up already a few issues from the previous discussion of your pitch in this thread (had no time to write a formal proposal though, and I have no idea who would be willing to help and implement it):