<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Mon, Jul 25, 2016 at 2:09 PM, David Rönnqvist <span dir="ltr">&lt;<a href="mailto:swift-evolution@swift.org" target="_blank">swift-evolution@swift.org</a>&gt;</span> wrote:<blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="auto"><div><div style="direction:inherit">Haskell calls the general <b>m (m a) -&gt; m a</b> function for &quot;join&quot;, but also has a specialized <b>[[a]] -&gt; [a]</b> function called &quot;concat&quot;. (The function corresponding to &quot;flatMap&quot; is called &quot;bind&quot; in Haskell (although used as an operator), so since neither is called flatten or flatMap it doesn&#39;t have the confusion where one of them would be named so).</div></div></div></blockquote><div><br></div><div>There&#39;s also <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/Data-Maybe.html#v:mapMaybe" target="_blank">mapMaybe</a> and <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:concatMap" target="_blank">concatMap</a> and <a href="http://hackage.haskell.org/package/base-4.9.0.0/docs/Prelude.html#v:mapM" target="_blank">mapM</a> and probably others. &quot;concat&quot; is just &quot;concatMap id&quot;. Similarly, concatMap can be seen as equivalent to bind with its arguments reversed, &quot;flip (&gt;&gt;=)&quot;. I personally find the plethora of similar functions confusing, but I&#39;m not totally fluent in Haskell&#39;s standard libraries.</div></div></div></div>