[swift-evolution] Auto-generate op==?
Patrick Gili
gili.patrick.r at gili-labs.com
Sat Feb 13 15:29:46 CST 2016
I've been playing with the concept in Haskell, and I like the concept. However, I don't like the proposed syntax, as it is not consistent the rest of the language. Maybe something like
struct Person : deriving Equatable {
let age: Int
let name: String
}
or
struct Person : @deriving Equatable {
let age: Int
let name: String
}
-Patrick
> On Feb 13, 2016, at 12:38 PM, Donald Pinckney <djpinckney at ucdavis.edu> wrote:
>
> To make sure I understand correctly, what you are discussing is having == be auto generated in some way for types. The automatic implementation of == would be a member wise logical and operation:
>
> struct Person {
> let age: Int
> let name: String
> } deriving Equatable
>
> Would also generate:
> func ==(left: Person, right: Person) -> Bool {
> return left.age == right.age && left.name == right.name;
> }
>
> The compiler would only do this if all data members implement (or derive) the Equatable protocol, and probably error otherwise.
>
> That's my interpretation. If I misunderstood, please correct me.
>
> As it stands, I think something like this is a fabulous idea, as I have recently found myself writing lots of member wise equality checks.
>
> Donald Pinckney
>
> Sent from my iPhone
>
> On Feb 13, 2016, at 9:12 AM, Donnacha Oisín Kidney via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>
>> In Haskell, when you declare a datatype, you can follow it with a “deriving” clause, and it will derive several typeclasses (which are Haskell’s equivalent to protocols):
>>
>> data Person = Person { name :: String, age :: Int } deriving Eq
>>
>> In Swift, I’d imaging the equivalent would be something like:
>>
>> struct Person {
>> let name: String
>> let age: Int
>> } deriving Equatable
>>
>>> On 13 Feb 2016, at 17:04, Patrick Gili via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>
>>> Not having a lot of experience with Haskell, can you provide an example, so that we can better understand what you're proposing?
>>>
>>> Cheers,
>>> -Patrick
>>>
>>>> On Feb 12, 2016, at 3:47 PM, Daniel Tartaglia via swift-evolution <swift-evolution at swift.org <mailto:swift-evolution at swift.org>> wrote:
>>>>
>>>> In Haskell, we can mark a data block as deriving from Eq and it will auto-generate the == operator.
>>>>
>>>> I would like to see Swift auto-generate the == operator if a struct implements Equatable. Obviously, it would only be able to do this if all the structs members implemented Equatable themselves.
>>>>
>>>> Has this idea already been proposed? I didn’t see it at the github repo…
>>>>
>>>> Thanks,
>>>>
>>>> _______________________________________________
>>>> swift-evolution mailing list
>>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>>
>>> _______________________________________________
>>> swift-evolution mailing list
>>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
>>
>> _______________________________________________
>> swift-evolution mailing list
>> swift-evolution at swift.org <mailto:swift-evolution at swift.org>
>> https://lists.swift.org/mailman/listinfo/swift-evolution <https://lists.swift.org/mailman/listinfo/swift-evolution>
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <https://lists.swift.org/pipermail/swift-evolution/attachments/20160213/6c8a21b4/attachment.html>
More information about the swift-evolution
mailing list