<div style="white-space:pre-wrap">Does not this make associatedtype redundant additional complexity?</div><br><div class="gmail_quote"><div dir="ltr">On Tue, 6 Dec 2016 at 16:35 Martin Waitz &lt;<a href="mailto:tali@admingilde.org">tali@admingilde.org</a>&gt; wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Am 2016-12-06 15:01, schrieb Daniel Leping via swift-evolution:<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; ConstructibleFromValue&lt;ValueType == V&gt;<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; Sounds way better to me than the second option considering we can&#39;t do<br class="gmail_msg">
&gt; just<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; ConstructibleFromValue&lt;V&gt;<br class="gmail_msg">
&gt;<br class="gmail_msg">
&gt; Because of lack of order of associated types. So IMO either we<br class="gmail_msg">
&gt; introduce order or we use == syntax.<br class="gmail_msg">
<br class="gmail_msg">
we should be careful not to mix up associated types with actual generic<br class="gmail_msg">
type parameters.<br class="gmail_msg">
When we introduce type parameters for protocols, they should be written<br class="gmail_msg">
within angle brackets.<br class="gmail_msg">
Requirements for associated types should just stay after `where`.<br class="gmail_msg">
<br class="gmail_msg">
&gt;&gt; What makes me worry is if this syntax is really the best one<br class="gmail_msg">
&gt;&gt; possible:<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; typealias ConstructibleFrom&lt;V&gt; = ConstructibleFromValue where<br class="gmail_msg">
&gt;&gt; ValueType == V<br class="gmail_msg">
&gt;&gt;<br class="gmail_msg">
&gt;&gt; I find it strange that such exact line with typealias and where is<br class="gmail_msg">
&gt;&gt; required.<br class="gmail_msg">
<br class="gmail_msg">
Why?<br class="gmail_msg">
It introduces a new generic type which is equivalent to some protocol<br class="gmail_msg">
with additional requirements,<br class="gmail_msg">
where the requirement on the associated type is parameterized.<br class="gmail_msg">
<br class="gmail_msg">
Of course we should also allow to directly write parameterized<br class="gmail_msg">
protocols:<br class="gmail_msg">
<br class="gmail_msg">
     protocol ConstructibleFrom&lt;V&gt; {<br class="gmail_msg">
         [...]<br class="gmail_msg">
     }<br class="gmail_msg">
<br class="gmail_msg">
which can then be used with the type parameter:<br class="gmail_msg">
<br class="gmail_msg">
     struct Stuff: ConstructibleFrom&lt;Things&gt; {}<br class="gmail_msg">
<br class="gmail_msg">
When we consider type parameters to be part of the protocol name,<br class="gmail_msg">
then we can also support conformance to multple protocols which only<br class="gmail_msg">
differ in the type parameter.<br class="gmail_msg">
<br class="gmail_msg">
--<br class="gmail_msg">
Martin<br class="gmail_msg">
</blockquote></div>