<!DOCTYPE html>
<html>
<head>
<title></title>
</head>
<body><div>On Wed, Nov 8, 2017, at 02:29 PM, Max Moiseev via swift-evolution wrote:<br></div>
<blockquote type="cite"><div><br></div>
<div><div><br></div>
<blockquote type="cite"><div>On Nov 8, 2017, at 12:20 PM, Tino Heth &lt;<a href="mailto:2th@gmx.de">2th@gmx.de</a>&gt; wrote:<br></div>
<div><br></div>
<div><div style="word-wrap:break-word;line-break:after-white-space;"><div><div><br></div>
<blockquote type="cite"><div><span class="font" style="font-family:Helvetica"><span class="size" style="font-size:12px">This is a wonderful example! But it’s an argument for a different discussion (of general usefulness of implicit optional promotion). Thanks to the optional promotion, what the closure returns is not nil, but instead is .some(nil), and that is not filtered out.</span></span><br></div>
</blockquote></div>
<div>My point is: The proposed filterMap isn’t a combination of map and filter at all — or can you build it just out of map &amp; filter, like flatMap is constructed from map &amp; flatten?<br></div>
</div>
</div>
</blockquote><div><a href="https://github.com/apple/swift/blob/master/stdlib/public/core/FlatMap.swift#L49">https://github.com/apple/swift/blob/master/stdlib/public/core/FlatMap.swift#L49</a><br></div>
</div>
<div><br></div>
<div>It *is* a combination of map and filter. It is purely for performance we don’t do the same thing on any Sequence, because that will allocate a temporary array or two.<br></div>
</blockquote><div><br></div>
<div>Well, that certainly explains the nasty return type. I rather wish we had a LazyFlatMapSequence type rather than using map(…).filter(…).map(…) if for no other reason than it would produce a return type that's easier to work with.<br></div>
<div><br></div>
<div>-Kevin Ballard</div>
<div><br></div>
</body>
</html>