I've started to explore Smart KeyPaths in the latest Swift Development Snapshot with regard to lenses and have been pleasantly surprised: Swift has one of the better out-of-box optics stories I've come across!
In (brief) use I've come across a few gaps that I was hoping we could fill in. ## Tuple KeyPaths I hoped these would work already, but I hit a compiler crash: https://bugs.swift.org/browse/SR-4888 ``` struct Location { let coords: (lat: Double, lng: Double) } \Location.coords.lat \Location.coords.0 ``` ## Enumeration KeyPaths I tried to find discussion around enum KeyPaths but couldn't find any. ``` struct User { let name: String } enum Result<Success, Failure: Error> { case success(Success) case failure(Failure) } \Result<User, Error>.success?.name ``` Enumeration cases with multiple values could use tuple-style matching. ``` enum Color { case gray(Double, a: Double) case rgba(r: Double, g: Double, b: Double, a: Double) // ... } \Color.gray.0?.description \Color.rgba.r?.description ``` ## Other Ideas The above are just quick ideas that would partially cover more use cases of lenses and prisms, but I'd love to explore other optics, as well. E.g, traversals: `\User.friends[..].friends` to return a user's friends' friends. - Stephen _______________________________________________ swift-evolution mailing list [email protected] https://lists.swift.org/mailman/listinfo/swift-evolution
