For example, this input...

    {{1, 2}, {3, 4}}*{{1, 2}, {3, 4}}

produces this output...

    {{1, 4}, {9, 16}}

and this input...

    {{1, 2}, {3, 4}}^2

produces the same...

    {{1, 4}, {9, 16}}

What I want in both cases is...

    {{7, 10}, {15, 22}}

I think I know what's going on here. Mathematica doesn't seem to be discriminating between lists of lists, and matrices, and the `*` and `^` operators are just threading over the lists.

I've found `.` and `MatrixPower` which do what I think `*` and `^` should.

But the question still remains, is this confusing (to at least me) behavior of `*` and `^` by design, and what benefit does it confer?