<div dir="ltr">Hi everyone,<div><br></div><div>I&#39;ve discovered today that Swift will actually choose 2 very differently behaving types of flatMap implementation based on the input signature. </div><div><br></div><div>For a Sequence of options it will call a flatMap that filters out nil&#39;s. For a Sequence of Sequence&#39;s it will call a flattening function, without filtering.</div><div><br></div><div><font color="rgba(0, 0, 0, 0.298039)">Leading to code that (IMHO) reads very not </font><font color="#000029">inconsistency, and unexpected. Sometime even looking a bit funny such as </font><font color="rgba(0, 0, 0, 0.298039)">collection.flatMap.flatMap:</font></div><div><font color="rgba(0, 0, 0, 0.298039)"><br></font></div><div><pre style="word-wrap:break-word;white-space:pre-wrap">  5&gt; let deep = [[&quot;1989&quot;, nil], [nil, &quot;Red&quot;], [nil, nil]]
deep: [[String?]] = 3 values {
  [0] = 2 values {
    [0] = &quot;1989&quot;
    [1] = nil
  }
  [1] = 2 values {
    [0] = nil
    [1] = &quot;Red&quot;
  }
  [2] = 2 values {
    [0] = nil
    [1] = nil
  }
}
  6&gt; deep.flatMap { $0 }
$R1: [String?] = 6 values {
  [0] = &quot;1989&quot;
  [1] = nil
  [2] = nil
  [3] = &quot;Red&quot;
  [4] = nil
  [5] = nil
}
  7&gt; deep.flatMap { $0 }.flatMap { $0 }
$R2: [String] = 2 values {
  [0] = &quot;1989&quot;
  [1] = &quot;Red&quot;
}</pre>I wonder why it was implemented this way?</div><div><br></div><div><br></div></div>