Scala List は次のように宣言されています
sealed abstract class List[+A] extends AbstractSeq[A] with LinearSeq[A] with Product with GenericTraversableTemplate[A, List] with LinearSeqOptimized[A, List[A]] with java.io.Serializable
List の先頭に要素を追加するメソッドは、次のように宣言されます。
def +:(elem: A): List[A]
型 A は共変であるのに、A が +: の反変の位置にあるのにコンパイラが文句を言わないのはなぜですか?