title: Scala's '::' operator, how does it work?
body: <p>In Scala, I can make a caseclass, <code>case class Foo(x:Int)</code>, and then put it in a list like so:</p>
  
  <pre><code>List(Foo(42))
  </code></pre>
  
  <p>Now, nothing strange here. The following is strange to me. The operator <code>::</code> is a function on a list, right? With any function with one argument in Scala, I can call it with infix notation.
  An example is <code>1 + 2</code> is a function <code>(+)</code> on the object <code>Int</code>. The class <code>Foo</code> I just defined does not have the <code>::</code> operator, so how is the following possible?</p>
  
  <pre><code>Foo(40) :: List(Foo(2))
  </code></pre>
  
  <p>In Scala 2.8 RC1, I get the following output from the interactive prompt:</p>
  
  <pre><code>scala&gt; case class Foo(x:Int)
  defined class Foo
  
  scala&gt; Foo(40) :: List(Foo(2))
  res2: List[Foo] = List(Foo(40), Foo(2))
  </code></pre>
  
  <p>I can go on and use it, but what is the explanation?</p>