vec-0.4: bench/DotProduct.hs
module DotProduct where
import qualified Data.Type.Nat as N
import qualified Data.Vec.Lazy as L
import qualified Data.Vec.Lazy.Inline as I
import qualified Data.Vec.Pull as P
import qualified Data.Vector as V
import qualified Data.Vector.Unboxed as U
listDotProduct :: [Int] -> [Int] -> Int
listDotProduct xs ys = sum (zipWith (*) xs ys)
vectorDotProduct :: V.Vector Int -> V.Vector Int -> Int
vectorDotProduct xs ys = V.sum (V.zipWith (*) xs ys)
unboxedDotProduct :: U.Vector Int -> U.Vector Int -> Int
unboxedDotProduct xs ys = U.sum (U.zipWith (*) xs ys)
vecDotProduct :: L.Vec n Int -> L.Vec n Int -> Int
vecDotProduct xs ys = L.sum (L.zipWith (*) xs ys)
pullDotProduct :: N.SNatI n => L.Vec n Int -> L.Vec n Int -> Int
pullDotProduct xs ys = pullDotProduct' (L.toPull xs) (L.toPull ys)
pullDotProduct' :: N.SNatI n => P.Vec n Int -> P.Vec n Int -> Int
pullDotProduct' xs ys = P.sum (P.zipWith (*) xs ys)
inlineDotProduct :: N.SNatI n => L.Vec n Int -> L.Vec n Int -> Int
inlineDotProduct xs ys = I.sum (I.zipWith (*) xs ys)