Try:
type
Vector = ref object
value: array[2, float64]
Matrix = ref object
value: array[2, Vector]
IX = range[0..1]
proc newVector(): Vector =
new(result)
proc newMatrix(): Matrix =
new(result)
for ix in 0 .. 1:
result.value[ix] = newVector()
proc `[]=`(v: Vector, i: IX, value: float64) =
v.value[i] = value
proc `[]`(v: Vector, i: IX): float64 =
v.value[i]
proc `[]`(m: Matrix, i: IX): Vector =
m.value[i]
let m = newMatrix()
m[0][0] = 1.0
echo "m[0][0] = ", m[0][0]
GC_fullCollect()
m[0][0] = 2.0
echo "m[0][0] = ", m[0][0]