packages feed

repa-examples-1.0.0.0: MMult/src/Solver.hs

{-# LANGUAGE TypeOperators #-}

module Solver where
import Data.Array.Repa

mmMult	:: Array DIM2 Double
	-> Array DIM2 Double
	-> Array DIM2 Double

mmMult arr1@Manifest{} arr2@Manifest{}
	= fold (+) 0 
  	$ traverse2 arr1 (force $ transpose arr2)
      		(\(sh :. m1 :. n1) -> \(_ :. n2 :. m2) -> (sh :. m1 :. n2 :. n1))
		(\f1 -> \f2 -> \(sh :. i :. j :. k) -> f1 (sh :. i :. k) * f2 (sh :. j :. k))