title: Why isn't rust `HashSet` return `Self` on any of its insert methods
body: <p>I'm curious about the design decision to return <code>bool</code> instead of <code>Option&lt;Self&gt;</code> or <code>Result&lt;Self, Self&gt;</code> or even <code>(Self, bool)</code>. If <code>HashSet</code> were using the <code>Result&lt;Self, Self&gt;</code> pattern, it would be possible to chain multiple single-item insertions like so:</p>
  <pre class="lang-rust prettyprint-override"><code>set.insert(1)?
     .insert(2)?
     .insert(3)? 
  </code></pre>
  <p>and if any of the items is present, the insertion chain stops. You get the same (but more concise) output pattern:</p>
  <pre class="lang-rust prettyprint-override"><code>if set.insert(3) {
     A
  } else {
     B
  }
  </code></pre>
  <p>becomes</p>
  <pre class="lang-rust prettyprint-override"><code>set.insert(3)
      .map(|| {A})
      .map_err(|| {B})
  </code></pre>
  <p>So I wonder if this has never occurred to the designers of the library, or was this form rejected because of some design requirement?</p>