{-# LANGUAGE ExplicitForAll #-}
module Data.Massiv.Array.Mutable.Internal
( unsafeCreateArray
, unsafeCreateArray_
, unsafeCreateArrayS
) where
import Control.Scheduler
import Data.Massiv.Core.Common
unsafeCreateArrayS ::
forall r ix e a m. (Mutable r ix e, PrimMonad m)
=> Sz ix
-> (MArray (PrimState m) r ix e -> m a)
-> m (a, Array r ix e)
unsafeCreateArrayS :: Sz ix
-> (MArray (PrimState m) r ix e -> m a) -> m (a, Array r ix e)
unsafeCreateArrayS Sz ix
sz MArray (PrimState m) r ix e -> m a
action = do
MArray (PrimState m) r ix e
marr <- Sz ix -> m (MArray (PrimState m) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
a
a <- MArray (PrimState m) r ix e -> m a
action MArray (PrimState m) r ix e
marr
Array r ix e
arr <- Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
Seq MArray (PrimState m) r ix e
marr
(a, Array r ix e) -> m (a, Array r ix e)
forall (m :: * -> *) a. Monad m => a -> m a
return (a
a, Array r ix e
arr)
{-# INLINE unsafeCreateArrayS #-}
unsafeCreateArray ::
forall r ix e a m b. (Mutable r ix e, PrimMonad m, MonadUnliftIO m)
=> Comp
-> Sz ix
-> (Scheduler m a -> MArray (PrimState m) r ix e -> m b)
-> m ([a], Array r ix e)
unsafeCreateArray :: Comp
-> Sz ix
-> (Scheduler m a -> MArray (PrimState m) r ix e -> m b)
-> m ([a], Array r ix e)
unsafeCreateArray Comp
comp Sz ix
sz Scheduler m a -> MArray (PrimState m) r ix e -> m b
action = do
MArray (PrimState m) r ix e
marr <- Sz ix -> m (MArray (PrimState m) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
[a]
a <- Comp -> (Scheduler m a -> m b) -> m [a]
forall (m :: * -> *) a b.
MonadUnliftIO m =>
Comp -> (Scheduler m a -> m b) -> m [a]
withScheduler Comp
comp (Scheduler m a -> MArray (PrimState m) r ix e -> m b
`action` MArray (PrimState m) r ix e
marr)
Array r ix e
arr <- Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp MArray (PrimState m) r ix e
marr
([a], Array r ix e) -> m ([a], Array r ix e)
forall (m :: * -> *) a. Monad m => a -> m a
return ([a]
a, Array r ix e
arr)
{-# INLINE unsafeCreateArray #-}
unsafeCreateArray_ ::
forall r ix e a m b. (Mutable r ix e, PrimMonad m, MonadUnliftIO m)
=> Comp
-> Sz ix
-> (Scheduler m a -> MArray (PrimState m) r ix e -> m b)
-> m (Array r ix e)
unsafeCreateArray_ :: Comp
-> Sz ix
-> (Scheduler m a -> MArray (PrimState m) r ix e -> m b)
-> m (Array r ix e)
unsafeCreateArray_ Comp
comp Sz ix
sz Scheduler m a -> MArray (PrimState m) r ix e -> m b
action = do
MArray (PrimState m) r ix e
marr <- Sz ix -> m (MArray (PrimState m) r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Sz ix -> m (MArray (PrimState m) r ix e)
unsafeNew Sz ix
sz
Comp -> (Scheduler m a -> m b) -> m ()
forall (m :: * -> *) a b.
MonadUnliftIO m =>
Comp -> (Scheduler m a -> m b) -> m ()
withScheduler_ Comp
comp (Scheduler m a -> MArray (PrimState m) r ix e -> m b
`action` MArray (PrimState m) r ix e
marr)
Array r ix e
arr <- Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
forall r ix e (m :: * -> *).
(Mutable r ix e, PrimMonad m) =>
Comp -> MArray (PrimState m) r ix e -> m (Array r ix e)
unsafeFreeze Comp
comp MArray (PrimState m) r ix e
marr
Array r ix e -> m (Array r ix e)
forall (m :: * -> *) a. Monad m => a -> m a
return Array r ix e
arr
{-# INLINE unsafeCreateArray_ #-}