It can only - for speed and simplicity - hold floating point numbers and are only in 2 dimensions.
The normal operation is to create the matrix object with a double array, like Math.Matrix( ({({1,2}),({3,4})}) ).
Another use is to create a special type of matrix, and this is told as third argument.
Currently there are only the "identity" type, which gives a matrix of zeroes except in the diagonal, where the number one (1.0) is. This is the default, too.
The third use is to give all indices in the matrix the same value, for instance zero or 42.
The forth use is some special matrixes. First the square identity matrix again, then the rotation matrix.
This equals |A| or sqrt( A02 + A12 + ... + An2 ).
It is only usable with 1xn or nx1 matrices.
m->normv() is equal to m*(1.0/m->norm()), with the exception that the zero vector will still be the zero vector (no error).