reedsolomon-0.0.1.0: src/Data/Vector/Generic/Lifted.hs
module Data.Vector.Generic.Lifted (
unsafeFreeze
, read
, write
, new
, freeze
, replicate
, mapM
, thaw
, forM
) where
import Prelude hiding (mapM, read, replicate)
import Control.Monad.Trans (MonadTrans, lift)
import Data.Vector.Generic (Mutable, Vector)
import qualified Data.Vector.Generic as V
import Data.Vector.Generic.Mutable (MVector)
import qualified Data.Vector.Generic.Mutable as MV
import Control.Monad.Primitive (PrimMonad, PrimState)
unsafeFreeze :: (Vector v a, PrimMonad m, MonadTrans t) => Mutable v (PrimState m) a -> t m (v a)
unsafeFreeze = lift . V.unsafeFreeze
{-# INLINE unsafeFreeze #-}
read :: (MVector v a, PrimMonad m, MonadTrans t) => v (PrimState m) a -> Int -> t m a
read v i = lift (MV.read v i)
{-# INLINE read #-}
write :: (MVector v a, PrimMonad m, MonadTrans t) => v (PrimState m) a -> Int -> a -> t m ()
write v i a = lift (MV.write v i a)
{-# INLINE write #-}
new :: (MVector v a, PrimMonad m, MonadTrans t) => Int -> t m (v (PrimState m) a)
new = lift . MV.new
{-# INLINE new #-}
freeze :: (Vector v a, PrimMonad m, MonadTrans t) => Mutable v (PrimState m) a -> t m (v a)
freeze = lift . V.freeze
{-# INLINE freeze #-}
replicate :: (MVector v a, PrimMonad m, MonadTrans t) => Int -> a -> t m (v (PrimState m) a)
replicate i a = lift (MV.replicate i a)
mapM :: (Vector v a, Vector v b, Monad m, MonadTrans t) => (a -> m b) -> v a -> t m (v b)
mapM f v = lift $ V.mapM f v
{-# INLINE mapM #-}
thaw :: (Vector v a, PrimMonad m, MonadTrans t) => v a -> t m (Mutable v (PrimState m) a)
thaw = lift . V.thaw
{-# INLINE thaw #-}
forM :: (Vector v a, Vector v b, Monad m, MonadTrans t) => v a -> (a -> m b) -> t m (v b)
forM = flip mapM
{-# INLINE forM #-}