title: What's the difference between `::` and `+:` for prepending to a list)?
body: <p><code>List</code> has 2 methods that are specified to prepend an element to an (immutable) list:</p>
  
  <ul>
  <li><code>+:</code> (implementing <code>Seq.+:</code>), and</li>
  <li><code>::</code> (defined only in <code>List</code>)</li>
  </ul>
  
  <p><code>+:</code> technically has a more general type signature—</p>
  
  <pre><code>def +:[B &gt;: A, That](elem: B)(implicit bf: CanBuildFrom[List[A], B, That]): That
  def ::[B &gt;: A](x: B): List[B]
  </code></pre>
  
  <p>—but ignoring the implicit, which according to the doc message merely requires <code>That</code> to be <code>List[B]</code>, the signatures are equivalent.</p>
  
  <p><strong>What is the difference between <code>List.+:</code> and <code>List.::</code>?</strong> If they are in fact identical, I assume <code>+:</code> would be preferred to avoid depending on the concrete implementation <code>List</code>. But why was another public method defined, and when would client code call it?</p>
  
  <h3>Edit</h3>
  
  <p>There is also an extractor for <code>::</code> in pattern matching, but I'm wondering about these particular methods.</p>
  
  <p>See also: <a href="https://stackoverflow.com/questions/6559996/scala-list-concatenation-vs">Scala list concatenation, ::: vs ++</a></p>