This can be reduced to:
`final case class ::[B](override val head: B, private[scala] var tl: List[B]) extends List[B] {`
which generates 1 less accessor