<html><head><meta http-equiv="content-type" content="text/html; charset=utf-8"></head><body dir="auto"><div></div><div>Hi Jacob,</div><div><br></div><div>I really like the idea of constraining associated types. However I think there could be a much more general solution to this problem by introducing "Partially constrained protocols".</div><div><br></div><div>I've already created a (almost finished) proposal for another thread which hasn't continued. It attacks the same issue as "<i style="background-color: rgba(255, 255, 255, 0);"><font color="#000000">Arbitrary requirements in protocols</font></i>":&nbsp;<a href="https://github.com/Qbyte248/swift-evolution/blob/master/proposals/0000-Partially%20constrained%20protocols%20and%20generic%20types.md">https://github.com/Qbyte248/swift-evolution/blob/master/proposals/0000-Partially%20constrained%20protocols%20and%20generic%20types.md</a></div><div><br></div><div>Unfortunately I have (almost) no time to discuss this in depth or completely finish the proposal. So feel free to copy my proposal add yourself as coauthor and start a new thread. Or just take it as an inspiration :)</div><div><br></div><div>Kind regards</div><div>- Maximilian</div><div><br></div><div>PS: Looking forward to a new generics model :)</div><div><br>Am 11.04.2016 um 10:01 schrieb Jacob Bandes-Storch via swift-evolution &lt;<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a>&gt;:<br><br></div><blockquote type="cite"><div><div dir="ltr">Doug wrote this in the Completing Generics manifesto, under "Minor extensions":<div><br></div><div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex"><i>*Arbitrary requirements in protocols<br></i></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">&nbsp;</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">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.,<br></blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">&nbsp;</blockquote><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-style:solid;border-left-color:rgb(204,204,204);padding-left:1ex">&nbsp; &nbsp; protocol Sequence {<br>&nbsp; &nbsp; &nbsp; &nbsp; associatedtype Iterator : IteratorProtocol<br>&nbsp; &nbsp; &nbsp; &nbsp; …<br>&nbsp; &nbsp; &nbsp; &nbsp; associatedtype SubSequence : Sequence where SubSequence.Iterator.Element == Iterator.Element<br>&nbsp; &nbsp; }<br></blockquote><div><br></div><div><br></div><div>+1.</div><div><br></div><div>To make it into Swift 3, would this feature require a proposal of its own? How feasible would it be to implement on top of the current system?</div><div><br></div><div><div class="gmail_signature"><div dir="ltr"><div>Jacob<br></div></div></div></div>
</div></div>
</div></blockquote><blockquote type="cite"><div><span>_______________________________________________</span><br><span>swift-evolution mailing list</span><br><span><a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a></span><br><span><a href="https://lists.swift.org/mailman/listinfo/swift-evolution">https://lists.swift.org/mailman/listinfo/swift-evolution</a></span><br></div></blockquote></body></html>