> I trying to learn a bit about data parallel haskell, and started from the > wiki page here:http://www.haskell.org/haskellwiki/GHC/Data_Parallel_Haskell. > Two questions: > > The examples express the dot product as: > > dotp_double xs ys = sumP [:x * > <http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.> > y | x <- xs | y <- ys:] > > Unless I'm missing something, shouldn't this actually be: > > dotp_double xs ys = sumP [:x * > <http://haskell.org/ghc/docs/latest/html/libraries/base/Prelude.html#v:.> > y | x <- xs, y <- ys:] > No, array comprehension desugaring works the same way as for list comprehension. So this correct:
dotp_double xs ys = sumP [:x * y | x <- xs | y <- ys:] After desugaring this will be translated into (simplified): dotp_double xs ys = sumP (zipWithP (*) xs ys) which will multiply the arrays element wise and sum the result. The other definition dotp_double xs ys = sumP [:x * y | x <- xs, y <- ys:] will be translated into (something equivalent): dotp_double xs ys = sumP (concatMapP (\x -> mapP (\y -> x * y)) xs ys) which definitely is not the dot product. _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe