<html><head><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; line-break: after-white-space;" class="">"Flattening" in the context of functional programming (and that's where map and flatMap come from) means something like this:<div class=""><br class=""></div><div class="">F&lt;F&lt;T&gt;&gt; -&gt; F&lt;T&gt;</div><div class=""><br class=""></div><div class="">So for example:</div><div class=""><br class=""></div><div class="">Array&lt;Array&lt;T&gt;&gt; -&gt; Array&lt;T&gt;</div><div class=""><br class=""></div><div class="">or</div><div class=""><br class=""></div><div class="">Optional&lt;Optional&lt;T&gt;&gt; -&gt; Optional&lt;T&gt;</div><div class=""><br class=""></div><div class="">but NOT:</div><div class=""><br class=""></div><div class="">Array&lt;Optional&lt;T&gt;&gt; -&gt; Array&lt;T&gt;</div><div class=""><br class=""></div><div class="">It's simply the wrong word for the operation.</div><div class=""><br class=""></div><div class="">If "Map" is something like this:</div><div class=""><br class=""></div><div class="">(F&lt;T&gt; + (T -&gt; U)) -&gt; F&lt;U&gt;</div><div class=""><br class=""></div><div class="">then "FlatMap" means "map to the same functor, then flatten", thus:</div><div class=""><br class=""></div><div class="">(F&lt;A&gt; + (A -&gt; F&lt;B&gt;)) -&gt; F&lt;F&lt;B&gt;&gt;</div><div class="">then&nbsp;<br class=""><div>(F&lt;F&lt;B&gt;&gt; -&gt; F&lt;B&gt;)</div><div><br class=""></div><div>In this case "U == F&lt;B&gt;"</div><div><br class=""></div><div>In fact, there's (rightfully) a FlatMap method on Optional in cases in which the mapping function produces another Optional (notice that the chained unwrapping with "?." is a FlatMap operation).</div><div><br class=""></div><div>Calling FlatMap something that is not (in the literature and community at large) was not a good idea, in my opinion.</div><div><br class=""></div><div>Elviro</div><div><br class=""><blockquote type="cite" class=""><div class="">Il giorno 24 ott 2017, alle ore 14:10, Tino &lt;<a href="mailto:2th@gmx.de" class="">2th@gmx.de</a>&gt; ha scritto:</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; line-break: after-white-space;" class=""><div class=""><br class=""><blockquote type="cite" class=""><div class=""><div class="" style="font-family: Helvetica; font-size: 12px; font-style: normal; font-variant-caps: normal; font-weight: normal; letter-spacing: normal; text-align: start; text-indent: 0px; text-transform: none; white-space: normal; word-spacing: 0px; -webkit-text-stroke-width: 0px;">Calling "flatMap" a map + filtering out the nil values was a TERRIBLE idea.</div></div></blockquote></div>maybe I’m the one who’s getting this all wrong, but afaik the purpose of flatMap isn’t filtering out nil at all, but just a combination of map &amp; flatten…<div class="">Optional&lt;T&gt; is like Array&lt;T&gt; with a maximal capacity of one (so it can either contain a single object, or it’s empty), and in this interpretation, there’s nothing wrong with the behavior.</div><div class=""><br class=""></div><div class="">Instead, I think Nobuo Saito is right, and that a renaming to filteredMap is only fighting symptoms, and not the cause (but I’m not that sure if there’s a good way to tackle the cause).</div><div class="">Besides that, all those alternative names also have potential for confusion:</div><div class="">Imho it isn’t intuitive what is filtered out — and don’t forget that the result of flatMap can contain nil elements…</div><div class=""><br class=""></div><div class="">If the biggest problem of flatMap is that people who don’t understand it write code that isn’t optimal (but still does the right thing!), I don’t think there is any change needed. I’m not even sure that that wrapping/unwrapping is actually done, because it should be discoverable by the compiler.</div><div class=""><br class=""></div><div class="">It would be nice if there was an way to warn in places where flatMap could be replaced with map, though (but imho this special warning shouldn’t be checked by the compiler).</div><div class=""><br class=""></div><div class="">- Tino</div></div></div></blockquote></div><br class=""></div></body></html>