>>> Where generic subscripts are concerned, there are a couple of different 
>>> things to express:
>>> - Generic parameter  (I can understand various co-ordinates for the data)
>>> - Generic return type (I can construct your preferred representation of the 
>>> data)
>>> - Generic setter type (I can set the data using various compatible types):
>> 
>> I think all of these should be expressed with a single generic signature on 
>> the subscript itself. The element type passed to the setter and returned 
>> from the getter should be the same IMO, otherwise it’s not clear how it will 
>> work.
> 
> Yes.  It's quite important that any particular subscript reference is still a 
> single consistent entity, even if generic; we would not want, say, a 
> read-modify-write access to be able to somehow invoke the getter and setter 
> at different generic arguments, or to traffic in different element types.
> 
> I'm also not sure we'd ever want the element type to be inferred from context 
> like this.  Generic subscripts as I see it are about being generic over 
> *indexes*, not somehow about presenting a polymorphic value.

This is a consequence of your vision of subscript. If interesting, it is also 
limiting for no real purpose.

As the developer of a Swift database library, I'd like to offer a better API 
than the following:

    // Current state of affairs
    let name: String = row.value(named: "name")
    let bookCount: Int = row.value(named: "bookCount")
    let hasBooks: Bool = row.value(named: "bookCount")

Instead, I wish I could offer GRDB.swift would let its users write:

    // With improved subscripts
    let name: String = row["name"]
    let bookCount: Int = row["bookCount"]
    let hasBooks: Bool = row["bookCount"]

And this requires genericity on return type.

Gwendal

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to