module Data.Vector.Build where
import Control.Monad.Primitive
import Data.Vector.Generic (Vector, create)
import Data.Vector.Generic.Mutable
import Data.Foldable
import Prelude hiding (foldr)
import GHC.Exts
toMVectorMapN :: (Foldable f, PrimMonad m, MVector v b) =>
Int -> (a -> b) -> f a -> m (v (PrimState m) b)
toMVectorMapN !n f xs = do
!mv <- new n
let writer a k i# = unsafeWrite mv (I# i#) (f a) >> k (i# +# 1#)
foldr writer (\ _ -> return ()) xs 0#
return mv
toVectorMapN :: (Foldable f, Vector v b) => Int -> (a -> b) -> f a -> v b
toVectorMapN !n f xs = create (toMVectorMapN n f xs)