Hello Dan,

You'll be pleased to learn that conforming generic types conditionally to 
protocols is on the roadmap (and is one of the highest priority items for the 
versions of Swift following 3.0): 
https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-
 
<https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances->

However, it's unlikely that protocols will gain conditional conformance: 
https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-via-protocol-extensions
 
<https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#conditional-conformances-via-protocol-extensions>

That document originates from a mailing list post made some time ago, and is a 
decent overview as to what sorts of type system features the Swift core 
developers are interested in building.

Best,
Austin

> On Jun 4, 2016, at 2:12 PM, Dan Zimmerman via swift-evolution 
> <[email protected]> wrote:
> 
> Hey,
> 
> I was interested in adopting the ability for a type that's generic in some 
> sense (either via generics or via associated types, in the case of protocols) 
> to conform to other protocols conditionally based on its type 
> parameter/associated type. For example:
> 
> ```
> extension CollectionType: Equatable where Generator.Element: Equatable {}
> 
> func ==<Collection: CollectionType where Collection.Generator.Element: 
> Equatable>(left: Collection, right: Collection) -> Bool {
>  return zip(left, right).reduce(true) { accumulator, tuple in accumulator && 
> (tuple.0 == tuple.1) }
> }
> ```
> 
> If this has already been proposed and knocked out/accepted please direct me 
> to the right place.
> _______________________________________________
> swift-evolution mailing list
> [email protected]
> https://lists.swift.org/mailman/listinfo/swift-evolution

_______________________________________________
swift-evolution mailing list
[email protected]
https://lists.swift.org/mailman/listinfo/swift-evolution

Reply via email to