> On Jun 9, 2016, at 7:29 PM, Thorsten Seitz via swift-evolution > <swift-evolution@swift.org> wrote: > > >> Am 09.06.2016 um 00:18 schrieb Dave Abrahams via swift-evolution >> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>>: >> >> Exactly. But much simpler cases will also either have to trap at >> runtime or be prohibited outright: >> >> func subscript_<C: Collection>(c: C, i: C.Index) -> C.Collection.Element { >> return c[i] >> } > >> typealias IntCollection = Any<Collection where Element == Int> >> let c1: IntCollection = ... >> let c2: IntCollection = c1[3..<10] >> let c3: IntCollection = ... >> let c4: IntCollection = c1.reversed() >> >> // Note: the underlying index types are the same, and are supposed to >> // interoperate. What do you do (work/trap/nocompile)? >> _ = subscript_(c1, c2.startIndex) >> >> // The underlying index types happen to be the same, and are not >> // supposed to interoperate. What do you do (silently >> “work”/trap/nocompile)? >> _ = subscript_(c1, c3.startIndex) >> >> // The underlying index types are different. What do you do >> (trap/nocompile)? >> _ = subscript_(c1, c4.startIndex) > > > All of these are type errors. All we know about c1, c2, c3 and c4 is that > they are of type `Any<Collection where Element == Int>` which does not > constrain the Index type, so all we know is that each variable can have a > different Index type. So, the type system can only say, no, these are type > errors. > > On a second thought this example reads a little bit like the following: > > let x1: Object = … > let x2: Object = „hello" > > // work/trap/nocompile? > x1.characters > > // x2 happens to be a String > // work/trap/nocompile? > x2.characters > > I think we all agree that all these are type errors even though we know that > x2 contains a String and it might be useful to work in some cases. Maybe :-) > > The same applies to the examples above IMO. The static knowledge is not > sufficient for those examples to compile. > > > But thinking of path dependent types the following should work:
scala will soon have a ‘official' LLVM back-end… so that might soon be accessible to iOS devs > > let c1: IntCollection = … > let c2: c1.Type = c1[3..<10] > > subscript_(c1, c2.startIndex) // ok! > > > -Thorsten > > > _______________________________________________ > swift-evolution mailing list > swift-evolution@swift.org > https://lists.swift.org/mailman/listinfo/swift-evolution
_______________________________________________ swift-evolution mailing list swift-evolution@swift.org https://lists.swift.org/mailman/listinfo/swift-evolution