primitive-extras-0.1: library/PrimitiveExtras/Monad.hs
module PrimitiveExtras.Monad
where
import PrimitiveExtras.Prelude
import PrimitiveExtras.Types
import qualified PrimitiveExtras.Fold as A
{-| Given a size of the outer array and a function, which executes a fold over indexed elements in a monad,
constructs a prim multi-array -}
primMultiArray :: (Monad m, Prim element) => Int -> (forall x. Fold (Int, element) x -> m x) -> m (PrimMultiArray element)
primMultiArray outerArraySize runFold =
do
indexCounts <- runFold (lmap fst (A.indexCounts outerArraySize))
runFold (A.primMultiArray (indexCounts :: PrimArray Word32))