On Fri, Jan 13, 2017 at 3:37 PM Derrick Ho via swift-evolution < swift-evolution@swift.org> wrote:
I think it is better to create a syntax for getting the associated values
and then comparing them.
enum Option {
case foo(String)
case bar(Int)
case zip
}
let op = Option.foo("hello")
let bb = Option.foo("world")
// proposed tuple-like syntax
op.foo.0 // returns Optional("hello")
// then we can compare values directly
if op.foo.0 == bb.foo.0 {
// ...
}
On Fri, Jan 13, 2017 at 5:44 PM Slava Pestov via swift-evolution < > swift-evolution@swift.org> wrote:
On Jan 13, 2017, at 2:30 PM, David Sweeris via swift-evolution < > swift-evolution@swift.org> wrote:
On Jan 13, 2017, at 15:10, Anton Zhilin via swift-evolution < > swift-evolution@swift.org> wrote:
That seems pretty close to Rust’s derive. Why not invent a similar syntax
in Swift? Otherwise it will make us look through all the sources to make
sure deriving is used.
enum Option: @derive Equatable {
...
}
Also, we can get better looking compilation errors, like:
ERROR at line 1, col 14: could not derive Equatable for Option
enum Option: @derive Equatable {
^~~~~~~~~~~~~~~~~
I think that idea came up once before... can't remember where, though, or
what we thought of it at the time.
As far as reducing enum boilerplate, what about borrowing the generic
system's syntax and looking at it from the switch's PoV?
func == (lhs: MyEnum, rhs: MyEnum) -> Bool {
switch <c is MyEnum> (lhs, rhs) {
case (c(let lVal), c(let rVal)): // both lhs and rhs are "c" and the
same case
return lVal == rVal //syntax error if `==` isn't defined for the
associated value types of every case
default: return false
}
}
I think initially, we would like to implement deriving these witnesses
directly in the compiler, instead of trying to come up with a
metaprogramming syntax for them.
Slava
- Dave Sweeris
_______________________________________________
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
_______________________________________________
swift-evolution mailing list
swift-evolution@swift.org
https://lists.swift.org/mailman/listinfo/swift-evolution