Mapa Scala Array zwraca ArraySeq

Dlaczego w moich metodach fabrycznych nie mogę mieć parametrów typu?

import org.junit.runner.RunWith
import org.scalatest.junit.JUnitRunner
import org.scalatest.FunSuite

@RunWith(classOf[JUnitRunner])
class WhyScalaNeverWillMakeIt extends FunSuite {

  test("Array becomes ArraySeq when you least want it") {
    val arr = Array("A", "B", "C")
    def f: String => Dummy = new Dummy(_)

    val bucket = new Bucket[Dummy](arr.map(f))
//    val bucket2 = Bucket[String, Dummy](arr, f)
//    val bucket3 = Bucket[Dummy](arr, f)
    val bucket4 = Bucket(arr, f)
  }

  class Bucket[T]( val arr: Array[T] )  {/* Loads of business logic */}

  object Bucket {
//    def apply[T, U](arr: Array[T], f:T=>U):Bucket[U] = new Bucket[U](arr.map( b => f(b) ))
//    def apply[T](arr: Array[String], f:String=>T):Bucket[T] = new Bucket[T](arr.map( b => f(b) ))
    def apply(arr: Array[String], f:String=>Dummy):Bucket[Dummy] = new Bucket[Dummy](arr.map(f))
  }


  class Dummy(val name: String)
}

Jeśli odkomentuję metody fabryczneobject Bucket Dostaję:

error: type mismatch;
found   : scala.collection.mutable.ArraySeq[T]
required: Array[T]
def apply[T](arr: Array[String], f:String=>T):Bucket[T] = new Bucket[T](arr.map( b => f(b) ))

W jakiś sposób kompilator Scala był zdezorientowany (a może to ja? ;-)), kiedy wprowadziłem parametr typu T. Może robię coś bardzo złego tutaj, ale nie widzę powodu, dla którego wprowadzenie parametru typu oznacza, że ​​funkcja mapy powinien zmienić typ powrotu z Array [T] na ArraySeq [T].

Wiem, że Array jest tylko opakowaniem wokół Java Array i prawdopodobnie powinienem użyć jednej z bardziej wymyślnych klas Scala, takich jak Seq lub List, ale to wciąż nie wyjaśnia tego raczej dziwnego zachowania.

Czy ktoś może wyjaśnić, dlaczego tak się dzieje, a może także, jak to naprawić (nadal używając tablic)?

Edytuj: Używam scala 2.9.1

questionAnswers(1)

yourAnswerToTheQuestion