Tipo de array multidimensional retangular e seguro para tipos

Como você representa umretangular Estrutura de dados de matriz bidimensional (ou multidimensional) em Scala?

Ou seja, cada linha tem o mesmo tamanho,verificado em tempo de compilação, mas as dimensões são determinadas em tempo de execução?

Seq[Seq[A]] tem a interface desejada, mas permite que o usuário forneça uma matriz "irregular", o que pode resultar em uma falha de tempo de execução.

Seq[(A, A, A, A, A, A)] (e similar) verifica se os comprimentos são os mesmos, mas também força esse comprimento a ser especificado em tempo de compilação.

Interface de exemplo

Aqui está uma interface de exemplo do que eu quero dizer (claro, a dimensão interna não precisa ser tuplas; ela pode ser especificada como listas ou outro tipo):

// Function that takes a rectangular array
def processArray(arr : RectArray2D[Int]) = {
    // do something that assumes all rows of RectArray are the same length
}

// Calling the function (OK)
println(processArray(RectArray2D(
    ( 0,  1,  2,  3),
    (10, 11, 12, 13),
    (20, 21, 22, 23)
)))
// Compile-time error
println(processArray(RectArray2D(
    ( 0,  1,  2,  3),
    (10, 11, 12),
    (20, 21, 22, 23, 24)
)))

questionAnswers(3)

yourAnswerToTheQuestion