Tipo de matriz multidimensional rectangular de tipo seguro

¿Cómo representas a unrectangular ¿Estructura de datos de matriz bidimensional (o multidimensional) en Scala?

Es decir, cada fila tiene la misma longitud,verificado en tiempo de compilación, pero las dimensiones se determinan en tiempo de ejecución?

Seq[Seq[A]] tiene la interfaz deseada, pero le permite al usuario proporcionar una matriz "irregular", que puede provocar un fallo en el tiempo de ejecución.

Seq[(A, A, A, A, A, A)] (y similar) verifica que las longitudes sean las mismas, pero también obliga a especificar esta longitud en el momento de la compilación.

Interfaz de ejemplo

Aquí hay una interfaz de ejemplo de lo que quiero decir (por supuesto, la dimensión interna no tiene que ser tuplas; podría especificarse como listas o algún otro 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)
)))

Respuestas a la pregunta(3)

Su respuesta a la pregunta