Der Support für Arrays in Haskell ist nicht ausreichend für intensive lineare Algebra.
Viele effiziente Algorithmen beruhen darauf, daß die Matrizenelemente an ihrem ursprünglichen Ort modifiziert werden, z.B. LU- und Cholesky-Zerlegung. Sofern keine Referenzen auf die Elemente der Ursprungsmatrix neben der transformierten Matrix verwendet werden, besteht kein grundsätzlicher Hinderungsgrund, den Compiler eben diesen effizienten Code erzeugen zu lassen.
Der Grund liegt daran, daß der Datentyp für 2-dimensionale Matrizen die Signatur Int#→ Int#→ Float# oder (Int#,Int#) → Float# haben müßte. Da es nicht erlaubt ist, in das Innere von Funktionen zu sehen, ist es zwar leicht, eine Matrix in Untermatrizen zu zerlegen, jedoch das Zusammensetzen funktioniert nicht befriedigend.