[swift-evolution] [Completing Generics] Arbitrary requirements in protocols
Dave Abrahams
dabrahams at apple.com
Tue Apr 12 17:07:50 CDT 2016
on Tue Apr 12 2016, Douglas Gregor <swift-evolution at swift.org> wrote:
> On Apr 11, 2016, at 1:01 AM, Jacob Bandes-Storch via swift-evolution
> <swift-evolution at swift.org> wrote:
>
> Doug wrote this in the Completing Generics manifesto, under "Minor
> extensions":
>
> *Arbitrary requirements in protocols
>
> Currently, a new protocol can inherit from other protocols, introduce
> new associated types, and add new conformance constraints to associated
> types (by redeclaring an associated type from an inherited protocol).
> However, one cannot express more general constraints. Building on the
> example from “Recursive protocol constraints”, we really want the
> element type of a Sequence’s SubSequence to be the same as the element
> type of the Sequence, e.g.,
>
> protocol Sequence {
> associatedtype Iterator : IteratorProtocol
> …
> associatedtype SubSequence : Sequence where SubSequence.Iterator.Element
> == Iterator.Element
> }
>
> +1.
>
> To make it into Swift 3, would this feature require a proposal of its own?
>
> Yes. Also, be wary that the syntax above potentially conflicts with the syntax
> discussed as "moving the where clauses”:
>
> http://thread.gmane.org/gmane.comp.lang.swift.evolution/13886/focus=14058
>
> How feasible would it be to implement on top of the current system?
>
> Definitely! The archetype builder would need to learn to check these extra where
> clauses, and one would need to be sure that the constraint solver is picking
> them up as well.
By the way, having this would enable us to massively simplify the
standard library, and potentially lots of user-written generic code,
too. So I'm very excited that someone's interested!
--
Dave
More information about the swift-evolution
mailing list