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.

Attachment: signature.asc
Description: Digital signature

_______________________________________________
Haskell-Cafe mailing list
Haskell-Cafe@haskell.org
http://www.haskell.org/mailman/listinfo/haskell-cafe

Reply via email to