<html><head><meta http-equiv="Content-Type" content="text/html charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><div class="">This provides a way to do a quick mapping that may not have been originally designed into the data structure which could be useful, and seems pretty powerful.&nbsp;</div><div class=""><br class=""></div><div class="">What you are saying, I think, correct me if I am wrong, is that “map" could be applied on both containers and non-containers and “map” would be extended to support the switch like expression. I think exploring container types, even objects and structs, as the control value would be useful. This may lead to something useful, &nbsp;and make sure that what is being proposed can support it in the future if not in the first release.&nbsp;</div><div class=""><br class=""></div><div class="">- Paul</div><div class=""><br class=""></div></div></div></div></div></blockquote><div><br class=""></div><div>Essentially yes…. it dawned on me that essentially what we are doing was pattern matching and then transforming (mapping) values using a function depending on which pattern was matched — and there was already something to do this called map. &nbsp;It just needs to allow for pattern matching similar to switch. &nbsp;The only thing was that we would need to be able to map (which would include pattern matching) on any value, tuple etc. as well as on collection containers. &nbsp; It would be more powerful than just map, far more powerful than just a “switch expression” and cover a number of holes at the same time. &nbsp;No changes to ternary would be needed, and no new matching expressions would have to be created.</div><div><br class=""></div><div>To do this map would have to be implemented on things like Int, Float, tuples — in addition to containers and optionals. &nbsp;</div><div><br class=""></div><div>The pattern matching should be allowed on other functions like map, filter, reduce (left or right), fold (left or right) etc.</div><div><br class=""></div><div>-Craig</div><br class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><div class=""><div class=""><div class=""><blockquote type="cite" class=""><div class="">On Jan 7, 2016, at 9:14 PM, Craig Cruden &lt;<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class="">(forgot the other colons which would also become “in” not “:”<div class=""><br class=""></div><div class=""><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><font color="#bb2ca2" class="">let commission =&nbsp;</font><span class="" style="color: rgb(79, 129, 135);">trade</span><span class="">.map {</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space: pre;">        </span>case</span>&nbsp;.Buy(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price)&nbsp;<span class="" style="color: rgb(187, 44, 162);">where</span>&nbsp;<span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price &gt;&nbsp;<span class="" style="color: rgb(39, 42, 216);">10000 in</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space: pre;">        </span>case</span>&nbsp;.Buy(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price) in</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">commissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space: pre;">        </span>case</span>&nbsp;.Sell(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price)&nbsp;<span class="" style="color: rgb(187, 44, 162);">where</span>&nbsp;<span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price &gt;&nbsp;<span class="" style="color: rgb(39, 42, 216);">10000 in</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space: pre;">        </span>case</span>&nbsp;.Sell(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price) in</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">commissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(39, 42, 216);">}</span></div><div class=""><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class=""><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class=""><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class=""><blockquote type="cite" class=""><div class="">On 2016-01-08, at 12:11:43, Craig Cruden &lt;<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>&gt; wrote:</div><br class="Apple-interchange-newline"><div class=""><meta http-equiv="Content-Type" content="text/html charset=utf-8" class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class="">I was thinking about this a bit, and was thinking that maybe we would not need a new keyword at all but just use `map` with pattern matching `case` clauses. &nbsp;It would mean adding `map` to individual values — or anything that we might want to use as input for matching. &nbsp;</div><div class=""><br class=""></div><div class="">Reference scala (section 8.5) pattern matching:&nbsp;<a href="http://www.scala-lang.org/docu/files/ScalaReference.pdf" class="">http://www.scala-lang.org/docu/files/ScalaReference.pdf</a></div><div class=""><br class=""></div><div class="">In scala inside `map` and `filter` (unfortunately not on things like `reduceLeft` or `foldLeft`&nbsp;you can specify pattern matching anonymous functions as such:</div><div class=""><br class=""></div><div class=""><div class=""><div class="">val num = List(1, 5, 7)</div><div class=""><br class=""></div><div class="">num.map {</div><div class="">&nbsp; case x if x &lt; 5 =&gt; x + 1</div><div class="">&nbsp; case x =&gt; x - 1</div><div class="">}</div></div><div class=""><br class=""></div><div class="">output:&nbsp;List(2, 4, 6)</div><div class=""><br class=""></div><div class="">So if the pattern matching was added (I don’t believe Swift currently allows case classes in maps - but then I am rather junior in the language) Swift would not need a `match expression` it would simply be part of map and become something like:</div><div class=""><br class=""></div><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><font color="#bb2ca2" class="">let commission =&nbsp;</font><span class="" style="color: rgb(79, 129, 135);">trade</span><span class="">.map {</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space:pre">        </span>case</span>&nbsp;.Buy(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price)&nbsp;<span class="" style="color: rgb(187, 44, 162);">where</span>&nbsp;<span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price &gt;&nbsp;<span class="" style="color: rgb(39, 42, 216);">10000 in</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space:pre">        </span>case</span>&nbsp;.Buy(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price):</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">commissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space:pre">        </span>case</span>&nbsp;.Sell(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price)&nbsp;<span class="" style="color: rgb(187, 44, 162);">where</span>&nbsp;<span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price &gt;&nbsp;<span class="" style="color: rgb(39, 42, 216);">10000</span>:</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(187, 44, 162);"><span class="Apple-tab-span" style="white-space:pre">        </span>case</span>&nbsp;.Sell(<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;quantity,&nbsp;<span class="" style="color: rgb(187, 44, 162);">let</span>&nbsp;price):</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">commissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(39, 42, 216);">}</span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class=""><span class="" style="color: rgb(39, 42, 216);"><br class=""></span></div><div class=""><br class=""></div></div><div class=""><blockquote type="cite" class=""><div class=""><div style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;" class=""><div class=""><br class=""></div><div class="">But if we go with brackets then I would recommend something like this:&nbsp;</div><div class=""><br class=""></div><div class=""><span style="color: rgb(187, 44, 162); font-family: Menlo; font-size: 11px;" class="">let </span><span style="font-family: Menlo; font-size: 11px;" class="">commission</span><span style="color: rgb(187, 44, 162); font-family: Menlo; font-size: 11px;" class=""> =</span><span class="" style="color: rgb(187, 44, 162); font-family: Menlo; font-size: 11px;">&nbsp;match (</span><span style="color: rgb(79, 129, 135); font-family: Menlo; font-size: 11px;" class="">trade) </span><span style="font-family: Menlo; font-size: 11px;" class=""><font color="#bb2ca2" class="">{</font></span></div><blockquote style="margin: 0px 0px 0px 40px; border: none; padding: 0px;" class=""><div class=""><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">case</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">.Buy(</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">price)</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">where</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(112, 61, 170);">Double</span><span style="font-family: Menlo; font-size: 11px;" class="">(quantity) * price &gt;</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(39, 42, 216);">10000</span><span style="font-family: Menlo; font-size: 11px;" class="">:</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp; &nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(112, 61, 170);">Double</span><span style="font-family: Menlo; font-size: 11px;" class="">(quantity) * price *</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(79, 129, 135);">vipCommissionRate</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(39, 42, 216);">100</span></div><div class=""><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">case</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">.Buy(</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">price):</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp; &nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(112, 61, 170);">Double</span><span style="font-family: Menlo; font-size: 11px;" class="">(quantity) * price *</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(79, 129, 135);">commissionRate</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(39, 42, 216);">100</span></div><div class=""><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">case</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">.Sell(</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">price)</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">where</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(112, 61, 170);">Double</span><span style="font-family: Menlo; font-size: 11px;" class="">(quantity) * price &gt;</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(39, 42, 216);">10000</span><span style="font-family: Menlo; font-size: 11px;" class="">:</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp; &nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(112, 61, 170);">Double</span><span style="font-family: Menlo; font-size: 11px;" class="">(quantity) * price *</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(79, 129, 135);">vipCommissionRate</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(39, 42, 216);">100</span></div><div class=""><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">case</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">.Sell(</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span class="" style="font-family: Menlo; font-size: 11px; color: rgb(187, 44, 162);">let</span><span style="font-family: Menlo; font-size: 11px;" class="">&nbsp;</span><span style="font-family: Menlo; font-size: 11px;" class="">price):</span></div><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;">&nbsp; &nbsp;&nbsp;<span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price *&nbsp;<span class="" style="color: rgb(79, 129, 135);">commissionRate</span>&nbsp;/&nbsp;<span class="" style="color: rgb(39, 42, 216);">100</span></div></div></div></div></blockquote><div class=""><div class="" style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space;"><div class=""><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"><font color="#272ad8" class="">}</font></div></div></div></div></div></div></blockquote></div><br class=""></div></div></blockquote></div><br class=""></div></div></div></blockquote></div><br class=""></div></div></div></div></div></blockquote></div><br class=""></body></html>