Scalaで総数を返す再帰のコードでよく使われるのが、下記のような書き方です。

 def sumList(list:List[Int]): Int = {
    list match {
        case Nil => 0
        case x::list => x + sumList(list)
    }        
}

case Nilがマッチする為には引数のlistをtailするしかないことは理解出来ました。

が、 case x::list => x + sumList(list)を実行することでlistがtailされていくことがわかりません... ::演算子は左側の要素を右側のリストに連結するものなので、混乱しています。

なぜこの再帰呼び出しで引数のlistがtailされていくのでしょうか?