<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. </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, and make sure that what is being proposed can support it in the future if not in the first release. </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. It just needs to allow for pattern matching similar to switch. 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. 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. 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. </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 <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> 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 = </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> .Buy(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) <span class="" style="color: rgb(187, 44, 162);">where</span> <span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price > <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;"> <span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span> / <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> .Buy(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) in</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"> <span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">commissionRate</span> / <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> .Sell(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) <span class="" style="color: rgb(187, 44, 162);">where</span> <span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price > <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;"> <span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span> / <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> .Sell(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) in</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"> <span class="Apple-tab-span" style="white-space: pre;">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">commissionRate</span> / <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 <<a href="mailto:ccruden@novafore.com" class="">ccruden@novafore.com</a>> 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. It would mean adding `map` to individual values — or anything that we might want to use as input for matching. </div><div class=""><br class=""></div><div class="">Reference scala (section 8.5) pattern matching: <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` 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=""> case x if x < 5 => x + 1</div><div class=""> case x => x - 1</div><div class="">}</div></div><div class=""><br class=""></div><div class="">output: 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 = </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> .Buy(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) <span class="" style="color: rgb(187, 44, 162);">where</span> <span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price > <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;"> <span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span> / <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> .Buy(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price):</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"> <span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">commissionRate</span> / <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> .Sell(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price) <span class="" style="color: rgb(187, 44, 162);">where</span> <span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price > <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;"> <span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">vipCommissionRate</span> / <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> .Sell(<span class="" style="color: rgb(187, 44, 162);">let</span> quantity, <span class="" style="color: rgb(187, 44, 162);">let</span> price):</div><div class="" style="margin: 0px; font-size: 11px; line-height: normal; font-family: Menlo;"> <span class="Apple-tab-span" style="white-space:pre">                </span><span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">commissionRate</span> / <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: </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;"> 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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">price)</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">price):</span></div><div class=""><span style="font-family: Menlo; font-size: 11px;" class=""> </span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">price)</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">/</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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=""> </span><span style="font-family: Menlo; font-size: 11px;" class="">quantity,</span><span style="font-family: Menlo; font-size: 11px;" class=""> </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=""> </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;"> <span class="" style="color: rgb(112, 61, 170);">Double</span>(quantity) * price * <span class="" style="color: rgb(79, 129, 135);">commissionRate</span> / <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>