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

Reply via email to