> 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

Reply via email to