On Nov 20, 2017, at 6:30 PM, Kelvin Ma via swift-evolution 
<swift-evolution@swift.org> wrote:
> 
> can we go the route of SE-15 and just synthesize up to some sensible n = 7 or 
> whatever. i feel like this list has a habit of going “but it would be a lot 
> better to add X if we just wait until Y is a thing first” ignoring that Y 
> will probably not be a thing for the forseeable future and we really need X 
> right now

Sure, you can generate implementations of == or hashing functions, but that 
won’t let you use them as the key to a dictionary.  For that, you need actual 
conformance.

-Chris


> 
> On Mon, Nov 20, 2017 at 9:10 PM, Slava Pestov via swift-evolution 
> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
> Ignoring synthesized conformances for a second, think about how you would 
> manually implement a conformance of a tuple type to a protocol. You would 
> need some way to statically “iterate” over all the component types of the 
> tuple — in fact this is the same as having variadic generics.
> 
> If we had variadic generics, we could implement tuples conforming to 
> protocols, either by refactoring the compiler to allow conforming types to be 
> non-nominal, or by reworking things so that a tuple is a nominal type with a 
> single variadic generic parameter.
> 
> Slava
> 
> 
>> On Nov 20, 2017, at 9:06 PM, Tony Allevato via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> 
>> This is something I've wanted to look at for a while. A few weeks ago I 
>> pushed out https://github.com/apple/swift/pull/12598 
>> <https://github.com/apple/swift/pull/12598> to extend the existing synthesis 
>> to handle structs/enums when a field/payload has a tuple of things that are 
>> Equatable/Hashable, and in that PR it was (rightly) observed, as Chris just 
>> did, that making tuples conform to protocols would be a more general 
>> solution that solves the same problem you want to solve here.
>> 
>> I'd love to dig into this more, but last time I experimented with it I got 
>> stuck on places where the protocol conformance machinery expects 
>> NominalTypeDecls, and I wasn't sure where the right place to hoist that 
>> logic up to was (since tuples don't have a corresponding Decl from what I 
>> can tell). Any pointers?
>> 
>> On Mon, Nov 20, 2017 at 5:51 PM Chris Lattner via swift-evolution 
>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>> On Nov 20, 2017, at 5:48 PM, Kelvin Ma <kelvin1...@gmail.com 
>> <mailto:kelvin1...@gmail.com>> wrote:
>>> the end goal here is to use tuples as a compatible currency type, to that 
>>> end it makes sense for these three protocols to be handled as “compiler 
>>> magic” and to disallow users from manually defining tuple conformances 
>>> themselves. i’m not a fan of compiler magic, but Equatable, Hashable, and 
>>> Comparable are special because they’re the basis for a lot of standard 
>>> library functionality so i think the benefits of making this a special 
>>> supported case outweigh the additional language opacity.
>> 
>> I understand your goal, but that compiler magic can’t exist until there is 
>> something to hook it into.  Tuples can’t conform to protocols right now, so 
>> there is nothing that can be synthesized.
>> 
>> -Chris
>> 
>> 
>>> 
>>> On Mon, Nov 20, 2017 at 8:42 PM, Chris Lattner <clatt...@nondot.org 
>>> <mailto:clatt...@nondot.org>> wrote:
>>> 
>>>> On Nov 20, 2017, at 5:39 PM, Kelvin Ma via swift-evolution 
>>>> <swift-evolution@swift.org <mailto:swift-evolution@swift.org>> wrote:
>>>> 
>>>> when SE-185 
>>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0185-synthesize-equatable-hashable.md>
>>>>  went through swift evolution, it was agreed that the next logical step 
>>>> <https://www.mail-archive.com/swift-evolution@swift.org/msg26162.html> is 
>>>> synthesizing these conformances for tuple types, though it was left out of 
>>>> the original proposal to avoid mission creep. I think now is the time to 
>>>> start thinking about this. i’m also tacking on Comparable to the other two 
>>>> protocols because there is precedent in the language from SE-15 
>>>> <https://github.com/apple/swift-evolution/blob/master/proposals/0015-tuple-comparison-operators.md>
>>>>  that tuple comparison is something that makes sense to write.
>>>> 
>>>> EHC conformance is even more important for tuples than it is for structs 
>>>> because tuples effectively have no workaround whereas in structs, you 
>>>> could just manually implement the conformance. 
>>> 
>>> In my opinion, you’re approaching this from the wrong direction.  The 
>>> fundamental problem here is that tuples can’t conform to a protocol.  If 
>>> they could, synthesizing these conformances would be straight-forward.
>>> 
>>> If you’re interested in pushing this forward, the discussion is “how do 
>>> non-nominal types like tuples and functions conform to protocols”?
>>> 
>>> -Chris
>>> 
>>> 
>>> 
>>> 
>>> 
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution 
>> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> swift-evolution mailing list
> swift-evolution@swift.org <mailto:swift-evolution@swift.org>
> https://lists.swift.org/mailman/listinfo/swift-evolution 
> <https://lists.swift.org/mailman/listinfo/swift-evolution>
> 
> 
> _______________________________________________
> 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