uvector-0.1.1.1: examples/unit/TestUArr.hs
import Data.Array.Parallel.Base.BUArr (ST, runST)
import Data.Array.Parallel.Monadic.UArr
replicateU :: UA e => Int -> e -> UArr e
replicateU n e =
runST (do
arr <- newMU n
fill arr n
unsafeFreezeMU arr n
)
where
fill arr 0 = return ()
fill arr i =
do
let i' = i - 1
writeMU arr i' e
fill arr i'
sumU :: (Num e, UA e) => UArr e -> e
sumU arr = sumUp (lengthU arr) 0
where
sumUp 0 acc = acc
sumUp i acc =
let
i' = i - 1
acc' = acc + arr `indexU` i'
in
acc' `seq` sumUp i' acc'
main = print $ sumU (replicateU 5 (10 :: Int))