Bjorn Lisper wrote: > Here is one way to do it. First, you have to interpret operations on > matrices as being elementwise applied. E.g, (*) is interpreted as zipWith > (zipWith (*)) rather than matrix multiply
What's this, the principle of greatest surprise at work? Nonono, (*)
should be matrix multiplication, fromInteger x should be (x * I) and I
should be the identity matrix. Now all we need is an infinitely large
I, and that gives:
instance Num a => Num [[a]] where
(+) = zipWith (zipWith (+))
(-) = zipWith (zipWith (-))
negate = map (map negate)
fromInteger x = fix (((x : repeat 0) :) . map (0:))
m * n = [ [ sum $ zipWith (*) v w | w <- transpose n ] | v <- m ]
Udo.
signature.asc
Description: Digital signature
_______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
