{-# LANGUAGE DataKinds #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeOperators #-}
module Data.Vector.Primitive.Mutable.Sized
( MVector
, length
, length'
, null
, slice
, slice'
, init
, tail
, take
, take'
, drop
, drop'
, splitAt
, splitAt'
, overlaps
, new
, unsafeNew
, replicate
, replicate'
, replicateM
, replicateM'
, clone
, grow
, growFront
, clear
, read
, read'
, write
, write'
, modify
, modify'
, swap
, exchange
, exchange'
, unsafeRead
, unsafeWrite
, unsafeModify
, unsafeSwap
, unsafeExchange
, nextPermutation
, set
, copy
, move
, unsafeCopy
, toSized
, withSized
, fromSized
) where
import qualified Data.Vector.Generic.Mutable.Sized as VGM
import qualified Data.Vector.Primitive.Mutable as VSM
import GHC.TypeLits
import Data.Finite
import Data.Primitive (Prim)
import Data.Proxy
import Control.Monad.Primitive
import Prelude hiding ( length, null, replicate, init,
tail, take, drop, splitAt, read )
type MVector = VGM.MVector VSM.MVector
length :: forall n s a. (KnownNat n)
=> MVector n s a -> Int
length :: forall (n :: Nat) s a. KnownNat n => MVector n s a -> Int
length = MVector MVector n s a -> Int
forall (v :: * -> * -> *) (n :: Nat) s a.
KnownNat n =>
MVector v n s a -> Int
VGM.length
{-# inline length #-}
length' :: forall n s a. ()
=> MVector n s a -> Proxy n
length' :: forall (n :: Nat) s a. MVector n s a -> Proxy n
length' = MVector MVector n s a -> Proxy n
forall (v :: * -> * -> *) (n :: Nat) s a.
MVector v n s a -> Proxy n
VGM.length'
{-# inline length' #-}
null :: forall n s a. (KnownNat n)
=> MVector n s a -> Bool
null :: forall (n :: Nat) s a. KnownNat n => MVector n s a -> Bool
null = MVector MVector n s a -> Bool
forall (v :: * -> * -> *) (n :: Nat) s a.
KnownNat n =>
MVector v n s a -> Bool
VGM.null
{-# inline null #-}
slice :: forall i n k s a p. (KnownNat i, KnownNat n, Prim a)
=> p i
-> MVector (i+n+k) s a
-> MVector n s a
slice :: forall (i :: Nat) (n :: Nat) (k :: Nat) s a (p :: Nat -> *).
(KnownNat i, KnownNat n, Prim a) =>
p i -> MVector ((i + n) + k) s a -> MVector n s a
slice = p i -> MVector MVector ((i + n) + k) s a -> MVector MVector n s a
forall (v :: * -> * -> *) (i :: Nat) (n :: Nat) (k :: Nat) s a
(p :: Nat -> *).
(KnownNat i, KnownNat n, MVector v a) =>
p i -> MVector v ((i + n) + k) s a -> MVector v n s a
VGM.slice
{-# inline slice #-}
slice' :: forall i n k s a p
. (KnownNat i, KnownNat n, Prim a)
=> p i
-> p n
-> MVector (i+n+k) s a
-> MVector n s a
slice' :: forall (i :: Nat) (n :: Nat) (k :: Nat) s a (p :: Nat -> *).
(KnownNat i, KnownNat n, Prim a) =>
p i -> p n -> MVector ((i + n) + k) s a -> MVector n s a
slice' = p i
-> p n
-> MVector MVector ((i + n) + k) s a
-> MVector MVector n s a
forall (v :: * -> * -> *) (i :: Nat) (n :: Nat) (k :: Nat) s a
(p :: Nat -> *).
(KnownNat i, KnownNat n, MVector v a) =>
p i -> p n -> MVector v ((i + n) + k) s a -> MVector v n s a
VGM.slice'
{-# inline slice' #-}
init :: forall n s a. Prim a
=> MVector (n+1) s a -> MVector n s a
init :: forall (n :: Nat) s a.
Prim a =>
MVector (n + 1) s a -> MVector n s a
init = MVector MVector (n + 1) s a -> MVector MVector n s a
forall (v :: * -> * -> *) (n :: Nat) s a.
MVector v a =>
MVector v (n + 1) s a -> MVector v n s a
VGM.init
{-# inline init #-}
tail :: forall n s a. Prim a
=> MVector (1+n) s a -> MVector n s a
tail :: forall (n :: Nat) s a.
Prim a =>
MVector (1 + n) s a -> MVector n s a
tail = MVector MVector (1 + n) s a -> MVector MVector n s a
forall (v :: * -> * -> *) (n :: Nat) s a.
MVector v a =>
MVector v (1 + n) s a -> MVector v n s a
VGM.tail
{-# inline tail #-}
take :: forall n k s a. (KnownNat n, Prim a)
=> MVector (n+k) s a -> MVector n s a
take :: forall (n :: Nat) (k :: Nat) s a.
(KnownNat n, Prim a) =>
MVector (n + k) s a -> MVector n s a
take = MVector MVector (n + k) s a -> MVector MVector n s a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) s a.
(KnownNat n, MVector v a) =>
MVector v (n + k) s a -> MVector v n s a
VGM.take
{-# inline take #-}
take' :: forall n k s a p. (KnownNat n, Prim a)
=> p n -> MVector (n+k) s a -> MVector n s a
take' :: forall (n :: Nat) (k :: Nat) s a (p :: Nat -> *).
(KnownNat n, Prim a) =>
p n -> MVector (n + k) s a -> MVector n s a
take' = p n -> MVector MVector (n + k) s a -> MVector MVector n s a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) s a
(p :: Nat -> *).
(KnownNat n, MVector v a) =>
p n -> MVector v (n + k) s a -> MVector v n s a
VGM.take'
{-# inline take' #-}
drop :: forall n k s a. (KnownNat n, Prim a)
=> MVector (n+k) s a -> MVector k s a
drop :: forall (n :: Nat) (k :: Nat) s a.
(KnownNat n, Prim a) =>
MVector (n + k) s a -> MVector k s a
drop = MVector MVector (n + k) s a -> MVector MVector k s a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) s a.
(KnownNat n, MVector v a) =>
MVector v (n + k) s a -> MVector v k s a
VGM.drop
{-# inline drop #-}
drop' :: forall n k s a p. (KnownNat n, Prim a)
=> p n -> MVector (n+k) s a -> MVector k s a
drop' :: forall (n :: Nat) (k :: Nat) s a (p :: Nat -> *).
(KnownNat n, Prim a) =>
p n -> MVector (n + k) s a -> MVector k s a
drop' = p n -> MVector MVector (n + k) s a -> MVector MVector k s a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) s a
(p :: Nat -> *).
(KnownNat n, MVector v a) =>
p n -> MVector v (n + k) s a -> MVector v k s a
VGM.drop'
{-# inline drop' #-}
splitAt :: forall n m s a. (KnownNat n, Prim a)
=> MVector (n+m) s a -> (MVector n s a, MVector m s a)
splitAt :: forall (n :: Nat) (m :: Nat) s a.
(KnownNat n, Prim a) =>
MVector (n + m) s a -> (MVector n s a, MVector m s a)
splitAt = MVector MVector (n + m) s a
-> (MVector MVector n s a, MVector MVector m s a)
forall (v :: * -> * -> *) (n :: Nat) (m :: Nat) s a.
(KnownNat n, MVector v a) =>
MVector v (n + m) s a -> (MVector v n s a, MVector v m s a)
VGM.splitAt
{-# inline splitAt #-}
splitAt' :: forall n m s a p. (KnownNat n, Prim a)
=> p n -> MVector (n+m) s a -> (MVector n s a, MVector m s a)
splitAt' :: forall (n :: Nat) (m :: Nat) s a (p :: Nat -> *).
(KnownNat n, Prim a) =>
p n -> MVector (n + m) s a -> (MVector n s a, MVector m s a)
splitAt' = p n
-> MVector MVector (n + m) s a
-> (MVector MVector n s a, MVector MVector m s a)
forall (v :: * -> * -> *) (n :: Nat) (m :: Nat) s a
(p :: Nat -> *).
(KnownNat n, MVector v a) =>
p n -> MVector v (n + m) s a -> (MVector v n s a, MVector v m s a)
VGM.splitAt'
{-# inline splitAt' #-}
overlaps :: forall n k s a. Prim a
=> MVector n s a
-> MVector k s a
-> Bool
overlaps :: forall (n :: Nat) (k :: Nat) s a.
Prim a =>
MVector n s a -> MVector k s a -> Bool
overlaps = MVector MVector n s a -> MVector MVector k s a -> Bool
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) s a.
MVector v a =>
MVector v n s a -> MVector v k s a -> Bool
VGM.overlaps
{-# inline overlaps #-}
new :: forall n m a. (KnownNat n, PrimMonad m, Prim a)
=> m (MVector n (PrimState m) a)
new :: forall (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, Prim a) =>
m (MVector n (PrimState m) a)
new = m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, MVector v a) =>
m (MVector v n (PrimState m) a)
VGM.new
{-# inline new #-}
unsafeNew :: forall n m a. (KnownNat n, PrimMonad m, Prim a)
=> m (MVector n (PrimState m) a)
unsafeNew :: forall (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, Prim a) =>
m (MVector n (PrimState m) a)
unsafeNew = m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, MVector v a) =>
m (MVector v n (PrimState m) a)
VGM.unsafeNew
{-# inline unsafeNew #-}
replicate :: forall n m a. (KnownNat n, PrimMonad m, Prim a)
=> a -> m (MVector n (PrimState m) a)
replicate :: forall (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, Prim a) =>
a -> m (MVector n (PrimState m) a)
replicate = a -> m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, MVector v a) =>
a -> m (MVector v n (PrimState m) a)
VGM.replicate
{-# inline replicate #-}
replicate' :: forall n m a p. (KnownNat n, PrimMonad m, Prim a)
=> p n -> a -> m (MVector n (PrimState m) a)
replicate' :: forall (n :: Nat) (m :: * -> *) a (p :: Nat -> *).
(KnownNat n, PrimMonad m, Prim a) =>
p n -> a -> m (MVector n (PrimState m) a)
replicate' = p n -> a -> m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a
(p :: Nat -> *).
(KnownNat n, PrimMonad m, MVector v a) =>
p n -> a -> m (MVector v n (PrimState m) a)
VGM.replicate'
{-# inline replicate' #-}
replicateM :: forall n m a. (KnownNat n, PrimMonad m, Prim a)
=> m a -> m (MVector n (PrimState m) a)
replicateM :: forall (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, Prim a) =>
m a -> m (MVector n (PrimState m) a)
replicateM = m a -> m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(KnownNat n, PrimMonad m, MVector v a) =>
m a -> m (MVector v n (PrimState m) a)
VGM.replicateM
{-# inline replicateM #-}
replicateM' :: forall n m a p. (KnownNat n, PrimMonad m, Prim a)
=> p n -> m a -> m (MVector n (PrimState m) a)
replicateM' :: forall (n :: Nat) (m :: * -> *) a (p :: Nat -> *).
(KnownNat n, PrimMonad m, Prim a) =>
p n -> m a -> m (MVector n (PrimState m) a)
replicateM' = p n -> m a -> m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a
(p :: Nat -> *).
(KnownNat n, PrimMonad m, MVector v a) =>
p n -> m a -> m (MVector v n (PrimState m) a)
VGM.replicateM'
{-# inline replicateM' #-}
clone :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> m (MVector n (PrimState m) a)
clone :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> m (MVector n (PrimState m) a)
clone = MVector MVector n (PrimState m) a
-> m (MVector MVector n (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> m (MVector v n (PrimState m) a)
VGM.clone
{-# inline clone #-}
grow :: forall n k m a p. (KnownNat k, PrimMonad m, Prim a)
=> p k -> MVector n (PrimState m) a -> m (MVector (n + k) (PrimState m) a)
grow :: forall (n :: Nat) (k :: Nat) (m :: * -> *) a (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
p k
-> MVector n (PrimState m) a -> m (MVector (n + k) (PrimState m) a)
grow = p k
-> MVector MVector n (PrimState m) a
-> m (MVector MVector (n + k) (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) (m :: * -> *) a
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
p k
-> MVector v n (PrimState m) a
-> m (MVector v (n + k) (PrimState m) a)
VGM.grow
{-# inline grow #-}
growFront :: forall n k m a p. (KnownNat k, PrimMonad m, Prim a)
=> p k -> MVector n (PrimState m) a -> m (MVector (n + k) (PrimState m) a)
growFront :: forall (n :: Nat) (k :: Nat) (m :: * -> *) a (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
p k
-> MVector n (PrimState m) a -> m (MVector (n + k) (PrimState m) a)
growFront = p k
-> MVector MVector n (PrimState m) a
-> m (MVector MVector (n + k) (PrimState m) a)
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) (m :: * -> *) a
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
p k
-> MVector v n (PrimState m) a
-> m (MVector v (n + k) (PrimState m) a)
VGM.growFront
{-# inline growFront #-}
clear :: (PrimMonad m, Prim a) => MVector n (PrimState m) a -> m ()
clear :: forall (m :: * -> *) a (n :: Nat).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> m ()
clear = MVector MVector n (PrimState m) a -> m ()
forall (m :: * -> *) (v :: * -> * -> *) a (n :: Nat).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> m ()
VGM.clear
{-# inline clear #-}
read :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Finite n -> m a
read :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Finite n -> m a
read = MVector MVector n (PrimState m) a -> Finite n -> m a
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Finite n -> m a
VGM.read
{-# inline read #-}
read' :: forall n k a m p. (KnownNat k, PrimMonad m, Prim a)
=> MVector (n+k+1) (PrimState m) a -> p k -> m a
read' :: forall (n :: Nat) (k :: Nat) a (m :: * -> *) (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
MVector ((n + k) + 1) (PrimState m) a -> p k -> m a
read' = MVector MVector ((n + k) + 1) (PrimState m) a -> p k -> m a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) a (m :: * -> *)
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
MVector v ((n + k) + 1) (PrimState m) a -> p k -> m a
VGM.read'
{-# inline read' #-}
unsafeRead :: forall n a m. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Int -> m a
unsafeRead :: forall (n :: Nat) a (m :: * -> *).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Int -> m a
unsafeRead = MVector MVector n (PrimState m) a -> Int -> m a
forall (v :: * -> * -> *) (n :: Nat) a (m :: * -> *).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Int -> m a
VGM.unsafeRead
{-# inline unsafeRead #-}
write :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Finite n -> a -> m ()
write :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Finite n -> a -> m ()
write = MVector MVector n (PrimState m) a -> Finite n -> a -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Finite n -> a -> m ()
VGM.write
{-# inline write #-}
write' :: forall n k a m p. (KnownNat k, PrimMonad m, Prim a)
=> MVector (n+k+1) (PrimState m) a -> p k -> a -> m ()
write' :: forall (n :: Nat) (k :: Nat) a (m :: * -> *) (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
MVector ((n + k) + 1) (PrimState m) a -> p k -> a -> m ()
write' = MVector MVector ((n + k) + 1) (PrimState m) a -> p k -> a -> m ()
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) a (m :: * -> *)
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
MVector v ((n + k) + 1) (PrimState m) a -> p k -> a -> m ()
VGM.write'
{-# inline write' #-}
unsafeWrite :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Int -> a -> m ()
unsafeWrite :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Int -> a -> m ()
unsafeWrite = MVector MVector n (PrimState m) a -> Int -> a -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Int -> a -> m ()
VGM.unsafeWrite
{-# inline unsafeWrite #-}
modify :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> (a -> a) -> Finite n -> m ()
modify :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> (a -> a) -> Finite n -> m ()
modify = MVector MVector n (PrimState m) a -> (a -> a) -> Finite n -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> (a -> a) -> Finite n -> m ()
VGM.modify
{-# inline modify #-}
modify' :: forall n k a m p. (KnownNat k, PrimMonad m, Prim a)
=> MVector (n+k+1) (PrimState m) a -> (a -> a) -> p k -> m ()
modify' :: forall (n :: Nat) (k :: Nat) a (m :: * -> *) (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
MVector ((n + k) + 1) (PrimState m) a -> (a -> a) -> p k -> m ()
modify' = MVector MVector ((n + k) + 1) (PrimState m) a
-> (a -> a) -> p k -> m ()
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) a (m :: * -> *)
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
MVector v ((n + k) + 1) (PrimState m) a -> (a -> a) -> p k -> m ()
VGM.modify'
{-# inline modify' #-}
unsafeModify :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> (a -> a) -> Int -> m ()
unsafeModify :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> (a -> a) -> Int -> m ()
unsafeModify = MVector MVector n (PrimState m) a -> (a -> a) -> Int -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> (a -> a) -> Int -> m ()
VGM.unsafeModify
{-# inline unsafeModify #-}
swap :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Finite n -> Finite n -> m ()
swap :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Finite n -> Finite n -> m ()
swap = MVector MVector n (PrimState m) a -> Finite n -> Finite n -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Finite n -> Finite n -> m ()
VGM.swap
{-# inline swap #-}
unsafeSwap :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Int -> Int -> m ()
unsafeSwap :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Int -> Int -> m ()
unsafeSwap = MVector MVector n (PrimState m) a -> Int -> Int -> m ()
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Int -> Int -> m ()
VGM.unsafeSwap
{-# inline unsafeSwap #-}
exchange :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Finite n -> a -> m a
exchange :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Finite n -> a -> m a
exchange = MVector MVector n (PrimState m) a -> Finite n -> a -> m a
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Finite n -> a -> m a
VGM.exchange
{-# inline exchange #-}
exchange' :: forall n k a m p. (KnownNat k, PrimMonad m, Prim a)
=> MVector (n+k+1) (PrimState m) a -> p k -> a -> m a
exchange' :: forall (n :: Nat) (k :: Nat) a (m :: * -> *) (p :: Nat -> *).
(KnownNat k, PrimMonad m, Prim a) =>
MVector ((n + k) + 1) (PrimState m) a -> p k -> a -> m a
exchange' = MVector MVector ((n + k) + 1) (PrimState m) a -> p k -> a -> m a
forall (v :: * -> * -> *) (n :: Nat) (k :: Nat) a (m :: * -> *)
(p :: Nat -> *).
(KnownNat k, PrimMonad m, MVector v a) =>
MVector v ((n + k) + 1) (PrimState m) a -> p k -> a -> m a
VGM.exchange'
{-# inline exchange' #-}
unsafeExchange :: forall n m a. (PrimMonad m, Prim a)
=> MVector n (PrimState m) a -> Int -> a -> m a
unsafeExchange :: forall (n :: Nat) (m :: * -> *) a.
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> Int -> a -> m a
unsafeExchange = MVector MVector n (PrimState m) a -> Int -> a -> m a
forall (v :: * -> * -> *) (n :: Nat) (m :: * -> *) a.
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> Int -> a -> m a
VGM.unsafeExchange
{-# inline unsafeExchange #-}
nextPermutation :: forall n e m. (Ord e, PrimMonad m, Prim e)
=> MVector n (PrimState m) e -> m Bool
nextPermutation :: forall (n :: Nat) e (m :: * -> *).
(Ord e, PrimMonad m, Prim e) =>
MVector n (PrimState m) e -> m Bool
nextPermutation = MVector MVector n (PrimState m) e -> m Bool
forall (v :: * -> * -> *) (n :: Nat) e (m :: * -> *).
(Ord e, PrimMonad m, MVector v e) =>
MVector v n (PrimState m) e -> m Bool
VGM.nextPermutation
{-# inline nextPermutation #-}
set :: (PrimMonad m, Prim a) => MVector n (PrimState m) a -> a -> m ()
set :: forall (m :: * -> *) a (n :: Nat).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> a -> m ()
set = MVector MVector n (PrimState m) a -> a -> m ()
forall (m :: * -> *) (v :: * -> * -> *) a (n :: Nat).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> a -> m ()
VGM.set
{-# inline set #-}
copy :: (PrimMonad m, Prim a)
=> MVector n (PrimState m) a
-> MVector n (PrimState m) a
-> m ()
copy :: forall (m :: * -> *) a (n :: Nat).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> MVector n (PrimState m) a -> m ()
copy = MVector MVector n (PrimState m) a
-> MVector MVector n (PrimState m) a -> m ()
forall (m :: * -> *) (v :: * -> * -> *) a (n :: Nat).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> MVector v n (PrimState m) a -> m ()
VGM.copy
{-# inline copy #-}
unsafeCopy :: (PrimMonad m, Prim a)
=> MVector n (PrimState m) a
-> MVector n (PrimState m) a
-> m ()
unsafeCopy :: forall (m :: * -> *) a (n :: Nat).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> MVector n (PrimState m) a -> m ()
unsafeCopy = MVector MVector n (PrimState m) a
-> MVector MVector n (PrimState m) a -> m ()
forall (m :: * -> *) (v :: * -> * -> *) a (n :: Nat).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> MVector v n (PrimState m) a -> m ()
VGM.unsafeCopy
{-# inline unsafeCopy #-}
move :: (PrimMonad m, Prim a)
=> MVector n (PrimState m) a
-> MVector n (PrimState m) a
-> m ()
move :: forall (m :: * -> *) a (n :: Nat).
(PrimMonad m, Prim a) =>
MVector n (PrimState m) a -> MVector n (PrimState m) a -> m ()
move = MVector MVector n (PrimState m) a
-> MVector MVector n (PrimState m) a -> m ()
forall (m :: * -> *) (v :: * -> * -> *) a (n :: Nat).
(PrimMonad m, MVector v a) =>
MVector v n (PrimState m) a -> MVector v n (PrimState m) a -> m ()
VGM.move
{-# inline move #-}
toSized :: forall n a s. (KnownNat n, Prim a)
=> VSM.MVector s a -> Maybe (MVector n s a)
toSized :: forall (n :: Nat) a s.
(KnownNat n, Prim a) =>
MVector s a -> Maybe (MVector n s a)
toSized = MVector s a -> Maybe (MVector MVector n s a)
forall (v :: * -> * -> *) (n :: Nat) s a.
(MVector v a, KnownNat n) =>
v s a -> Maybe (MVector v n s a)
VGM.toSized
{-# inline toSized #-}
withSized :: forall s a r. Prim a
=> VSM.MVector s a -> (forall n. KnownNat n => MVector n s a -> r) -> r
withSized :: forall s a r.
Prim a =>
MVector s a
-> (forall (n :: Nat). KnownNat n => MVector n s a -> r) -> r
withSized = MVector s a
-> (forall (n :: Nat). KnownNat n => MVector MVector n s a -> r)
-> r
forall (v :: * -> * -> *) s a r.
MVector v a =>
v s a
-> (forall (n :: Nat). KnownNat n => MVector v n s a -> r) -> r
VGM.withSized
{-# inline withSized #-}
fromSized :: MVector n s a -> VSM.MVector s a
fromSized :: forall (n :: Nat) s a. MVector n s a -> MVector s a
fromSized = MVector MVector n s a -> MVector s a
forall (v :: * -> * -> *) (n :: Nat) s a. MVector v n s a -> v s a
VGM.fromSized
{-# inline fromSized #-}