confusão com tipos existenciais em scala

Eu estava lutando para entender os tipos existenciais no scala, mas não consigo descobrir. Aqui está o meu código de teste:

scala> val a: Array[T] forSome {type T} = Array(1,2.2,"3")
a: Array[_] = Array(1, 2.2, 3)

scala> val b: Array[T forSome {type T}] = Array(1,2.2,"3")
b: Array[T forSome { type T }] = Array(1, 2.2, 3)

scala> a(0)
res35: Any = 1

scala> b(0)
res36: Any = 1

scala> a(0) = "x"
<console>:10: error: type mismatch;
 found   : String("x")
 required: T
              a(0) = "x"
                     ^

scala> b(0) = "x"

Me disseram queArray[T] forSome {type T} significa qualquer tipo de matriz, como matriz [Int], matriz [String] etc.Array[T forSome {type T}] significa Matriz [Qualquer]. Mas de acordo com o resultado do meu código de teste, não vejo essa diferença, e a mensagem de erro de compilação também é confusa. O querequired: T significa? Agradeço se alguém puder dar uma explicação detalhada, obrigado!

questionAnswers(2)

yourAnswerToTheQuestion