primitive-extras-0.1.3: library/PrimitiveExtras/IO.hs
module PrimitiveExtras.IO
where
import PrimitiveExtras.Prelude
import PrimitiveExtras.Types
import qualified PrimitiveExtras.UnliftedArray as A
generateUnliftedArray :: PrimUnlifted a => Int -> (Int -> IO a) -> IO (UnliftedArray a)
generateUnliftedArray = A.generate
replicateUnliftedArray :: PrimUnlifted a => Int -> IO a -> IO (UnliftedArray a)
replicateUnliftedArray = A.replicateIO
generateArray :: Int -> (Int -> IO a) -> IO (Array a)
generateArray size elementIO =
do
array <- newArray size undefined
let
loop index =
if index < size
then do
element <- elementIO index
writeArray array index element
loop (succ index)
else unsafeFreezeArray array
in loop 0