<div dir="ltr">This sounds like it could lead down a path that would clean up some ugly code I wrote recently.<div><br></div><div></div><font face="monospace, monospace">public protocol VectorType : GLmathType {<br>    typealias FloatVector<br>    typealias DoubleVector<br>    typealias Int32Vector<br>    typealias UInt32Vector<br>    typealias BooleanVector</font><div><br></div><div>This is the protocol for vector2/3/4 types. Some functions need to return a bool result. Others are an unsafe cast to another type. I&#39;m also using the BooleanVector as a key where I need vectors of the same length which have different elements.</div><div><br></div><div><div><font face="monospace, monospace">public func notEqual&lt;genType:ScalarVectorType where</font></div><div><font face="monospace, monospace">    genType.BooleanVector.Element == Bool,</font></div><div><font face="monospace, monospace">    genType.BooleanVector == genType.BooleanVector.BooleanVector</font></div><div><font face="monospace, monospace">    &gt;(x:genType, _ y:genType) -&gt; genType.BooleanVector {</font></div><div><font face="monospace, monospace">        return genType.BooleanVector(x, y, !=)</font></div><div><font face="monospace, monospace">}</font></div><div><br></div><div>Many times I went looking for any way to get back to the raw generic type. I don&#39;t know if this makes sense out of context, so here&#39;s the full set of prototypes:</div><div><a href="https://github.com/AE9RB/SwiftGL/blob/master/Sources/SwiftGLmath/Types.swift">https://github.com/AE9RB/SwiftGL/blob/master/Sources/SwiftGLmath/Types.swift</a><br></div><br></div><div>I hope this is helpful to those of you thinking about changes. It&#39;s really far down on my wish list though. The &quot;expression too complex&quot; errors and compile times are blocking me right now.</div><div><br></div><div>-david</div></div><div class="gmail_extra"><br><div class="gmail_quote">On Wed, Jan 20, 2016 at 10:21 PM, Charles Srstka via swift-evolution <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div style="word-wrap:break-word"><span class=""><blockquote type="cite">On Jan 20, 2016, at 11:56 PM, Slava Pestov &lt;<a href="mailto:spestov@apple.com" target="_blank">spestov@apple.com</a>&gt; wrote:<br></blockquote></span><div><span class=""><blockquote type="cite"><br><div><div style="word-wrap:break-word"><div><blockquote type="cite" style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div><div style="word-wrap:break-word"><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">Okay, in the example above, that leaves five places for the generic signature to go: after the “if”, after the “let”, after the variable name, after the equals sign, and after the “as?”. Or perhaps we could introduce some sort of new keyword in there to which to attach the generic signature.</div></div></div></blockquote><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><span style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px;float:none;display:inline!important">Various approaches have been discussed before. The one that’s closest to what you describe above is to have some kind of ‘open’ keyword,</span></div><div><br></div><div>func foo(p: SomeProto) {</div><div>  let t = open p as T {</div><div>    T.SomeAssocType.someStaticMethod(…)</div><div>  }</div><div>}</div></div></div></blockquote><div><br></div></span><div>Thanks, this looks good. Based on this, I found the earlier discussion where this came up, but it seems that the example above assumes you already know p is SomeProto. I assume there’d be a way to take p as something else, like an Any, and dynamically cast it to SomeProto using some combination of as? and open, right?</div><span class=""><br><blockquote type="cite"><div><div style="word-wrap:break-word"><div><blockquote type="cite"><div><div style="word-wrap:break-word"><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><div><blockquote type="cite"><blockquote type="cite"><div><div>Is this a feasible thing to ask for?<br></div></div></blockquote><div><br></div>I think so, but we have to careful with the design. This ties in with some of the discussions on generalizing existential types, also.</blockquote></div></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px"><br></div><div style="font-family:Helvetica;font-size:12px;font-style:normal;font-variant:normal;font-weight:normal;letter-spacing:normal;text-align:start;text-indent:0px;text-transform:none;white-space:normal;word-spacing:0px">That’s good to hear. Is there any information on what the Swift team is planning to do with existentials?</div></div></div></blockquote><div><br></div>Oh, I was just referring to the discussion on this list. No concrete proposals have been accepted so far, AFAIK.</div></div></div></blockquote></span></div><div><br></div><div>Well, if someone proposes one, it’ll get a +1 from me.</div><div><br></div>Thanks,<br><div>Charles</div><div><br></div></div><br>_______________________________________________<br>
swift-evolution mailing list<br>
<a href="mailto:swift-evolution@swift.org">swift-evolution@swift.org</a><br>
<a href="https://lists.swift.org/mailman/listinfo/swift-evolution" rel="noreferrer" target="_blank">https://lists.swift.org/mailman/listinfo/swift-evolution</a><br>
<br></blockquote></div><br></div>