{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE RankNTypes #-}
module Data.Dense.Boxed
(
BArray
, Shape
, HasLayout (..)
, Layout
, extent
, size
, indexes
, indexesFrom
, indexesBetween
, vector
, values
, values'
, valuesBetween
, flat
, fromList
, fromListInto
, fromListInto_
, fromVectorInto
, fromVectorInto_
, replicate
, generate
, linearGenerate
, create
, replicateM
, generateM
, linearGenerateM
, empty
, null
, (!)
, (!?)
, unsafeIndex
, linearIndex
, unsafeLinearIndex
, indexM
, unsafeIndexM
, linearIndexM
, unsafeLinearIndexM
, (//)
, accum
, map
, imap
, zip
, zip3
, zipWith
, zipWith3
, izipWith
, izipWith3
, ixRow
, rows
, ixColumn
, columns
, ixPlane
, planes
, flattenPlane
, unsafeOrdinals
, BMArray
, thaw
, freeze
, unsafeThaw
, unsafeFreeze
, G.Delayed
, delayed
, seqDelayed
, delay
, manifest
, seqManifest
, G.genDelayed
, G.indexDelayed
, affirm
, seqAffirm
, G.Focused
, G.focusOn
, G.unfocus
, G.unfocused
, G.extendFocus
, G.locale
, G.shiftFocus
) where
import Control.Lens hiding (imap)
import Control.Monad.Primitive
import Control.Monad.ST
import qualified Data.Foldable as F
import Data.Vector (Vector)
import Linear hiding (vector)
import Prelude hiding (map, null, replicate, zip,
zip3, zipWith, zipWith3)
import Data.Dense.Generic (BArray)
import qualified Data.Dense.Generic as G
import Data.Dense.Index
import Data.Dense.Mutable (BMArray)
values :: Shape f
=> IndexedTraversal (f Int) (BArray f a) (BArray f b) a b
values :: IndexedTraversal (f Int) (BArray f a) (BArray f b) a b
values = p a (f b) -> BArray f a -> f (BArray f b)
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
IndexedTraversal (f Int) (Array v f a) (Array v f b) a b
G.values'
{-# INLINE values #-}
values' :: Shape f
=> IndexedTraversal (f Int) (BArray f a) (BArray f b) a b
values' :: IndexedTraversal (f Int) (BArray f a) (BArray f b) a b
values' = p a (f b) -> BArray f a -> f (BArray f b)
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
IndexedTraversal (f Int) (Array v f a) (Array v f b) a b
G.values'
{-# INLINE values' #-}
valuesBetween
:: Shape f
=> f Int
-> f Int
-> IndexedTraversal' (f Int) (BArray f a) a
valuesBetween :: f Int -> f Int -> IndexedTraversal' (f Int) (BArray f a) a
valuesBetween = f Int -> f Int -> p a (f a) -> BArray f a -> f (BArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
f Int -> f Int -> IndexedTraversal' (f Int) (Array v f a) a
G.valuesBetween
{-# INLINE valuesBetween #-}
flat :: Iso (BArray V1 a) (BArray V1 b) (Vector a) (Vector b)
flat :: p (Vector a) (f (Vector b)) -> p (BArray V1 a) (f (BArray V1 b))
flat = p (Vector a) (f (Vector b)) -> p (BArray V1 a) (f (BArray V1 b))
forall (w :: * -> *) b (v :: * -> *) a.
Vector w b =>
Iso (Array v V1 a) (Array w V1 b) (v a) (w b)
G.flat
{-# INLINE flat #-}
vector :: IndexedLens (Layout f) (BArray f a) (BArray f b) (Vector a) (Vector b)
vector :: p (Vector a) (f (Vector b)) -> BArray f a -> f (BArray f b)
vector = p (Vector a) (f (Vector b)) -> BArray f a -> f (BArray f b)
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *).
(Vector v a, Vector w b) =>
IndexedLens (Layout f) (Array v f a) (Array w f b) (v a) (w b)
G.vector
{-# INLINE vector #-}
fromList :: [a] -> BArray V1 a
fromList :: [a] -> BArray V1 a
fromList = [a] -> BArray V1 a
forall (v :: * -> *) a. Vector v a => [a] -> Array v V1 a
G.fromList
{-# INLINE fromList #-}
fromListInto :: Shape f => Layout f -> [a] -> Maybe (BArray f a)
fromListInto :: Layout f -> [a] -> Maybe (BArray f a)
fromListInto = Layout f -> [a] -> Maybe (BArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> [a] -> Maybe (Array v f a)
G.fromListInto
{-# INLINE fromListInto #-}
fromListInto_ :: Shape f => Layout f -> [a] -> BArray f a
fromListInto_ :: Layout f -> [a] -> BArray f a
fromListInto_ = Layout f -> [a] -> BArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> [a] -> Array v f a
G.fromListInto_
{-# INLINE fromListInto_ #-}
fromVectorInto :: Shape f => Layout f -> Vector a -> Maybe (BArray f a)
fromVectorInto :: Layout f -> Vector a -> Maybe (BArray f a)
fromVectorInto = Layout f -> Vector a -> Maybe (BArray f a)
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> v a -> Maybe (Array v f a)
G.fromVectorInto
{-# INLINE fromVectorInto #-}
fromVectorInto_ :: Shape f => Layout f -> Vector a -> BArray f a
fromVectorInto_ :: Layout f -> Vector a -> BArray f a
fromVectorInto_ = Layout f -> Vector a -> BArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> v a -> Array v f a
G.fromVectorInto_
{-# INLINE fromVectorInto_ #-}
empty :: (Additive f) => BArray f a
empty :: BArray f a
empty = BArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Additive f) =>
Array v f a
G.empty
{-# INLINE empty #-}
null :: F.Foldable f => BArray f a -> Bool
null :: BArray f a -> Bool
null = BArray f a -> Bool
forall (f :: * -> *) (v :: * -> *) a.
Foldable f =>
Array v f a -> Bool
G.null
{-# INLINE null #-}
(!) :: Shape f => BArray f a -> f Int -> a
(!) = BArray f a -> f Int -> a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> a
(G.!)
{-# INLINE (!) #-}
(!?) :: Shape f => BArray f a -> f Int -> Maybe a
!? :: BArray f a -> f Int -> Maybe a
(!?) = BArray f a -> f Int -> Maybe a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> Maybe a
(G.!?)
{-# INLINE (!?) #-}
unsafeIndex :: Shape f => BArray f a -> f Int -> a
unsafeIndex :: BArray f a -> f Int -> a
unsafeIndex = BArray f a -> f Int -> a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Array v f a -> f Int -> a
G.unsafeIndex
{-# INLINE unsafeIndex #-}
linearIndex :: BArray f a -> Int -> a
linearIndex :: BArray f a -> Int -> a
linearIndex = BArray f a -> Int -> a
forall (v :: * -> *) a (f :: * -> *).
Vector v a =>
Array v f a -> Int -> a
G.linearIndex
{-# INLINE linearIndex #-}
unsafeLinearIndex :: BArray f a -> Int -> a
unsafeLinearIndex :: BArray f a -> Int -> a
unsafeLinearIndex = BArray f a -> Int -> a
forall (v :: * -> *) a (f :: * -> *).
Vector v a =>
Array v f a -> Int -> a
G.unsafeLinearIndex
{-# INLINE unsafeLinearIndex #-}
indexM :: (Shape f, Monad m) => BArray f a -> f Int -> m a
indexM :: BArray f a -> f Int -> m a
indexM = BArray f a -> f Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> f Int -> m a
G.indexM
{-# INLINE indexM #-}
unsafeIndexM :: (Shape f, Monad m) => BArray f a -> f Int -> m a
unsafeIndexM :: BArray f a -> f Int -> m a
unsafeIndexM = BArray f a -> f Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> f Int -> m a
G.unsafeIndexM
{-# INLINE unsafeIndexM #-}
linearIndexM :: (Shape f, Monad m) => BArray f a -> Int -> m a
linearIndexM :: BArray f a -> Int -> m a
linearIndexM = BArray f a -> Int -> m a
forall (f :: * -> *) (v :: * -> *) a (m :: * -> *).
(Shape f, Vector v a, Monad m) =>
Array v f a -> Int -> m a
G.linearIndexM
{-# INLINE linearIndexM #-}
unsafeLinearIndexM :: Monad m => BArray f a -> Int -> m a
unsafeLinearIndexM :: BArray f a -> Int -> m a
unsafeLinearIndexM = BArray f a -> Int -> m a
forall (v :: * -> *) a (m :: * -> *) (f :: * -> *).
(Vector v a, Monad m) =>
Array v f a -> Int -> m a
G.unsafeLinearIndexM
{-# INLINE unsafeLinearIndexM #-}
create :: (forall s. ST s (BMArray f s a)) -> BArray f a
create :: (forall s. ST s (BMArray f s a)) -> BArray f a
create forall s. ST s (BMArray f s a)
m = ST Any (BMArray f Any a)
forall s. ST s (BMArray f s a)
m ST Any (BMArray f Any a) -> BArray f a -> BArray f a
`seq` (forall s. ST s (BArray f a)) -> BArray f a
forall a. (forall s. ST s a) -> a
runST (ST s (BMArray f s a)
forall s. ST s (BMArray f s a)
m ST s (BMArray f s a)
-> (BMArray f s a -> ST s (BArray f a)) -> ST s (BArray f a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= BMArray f s a -> ST s (BArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.unsafeFreeze)
{-# INLINE create #-}
replicate :: Shape f => f Int -> a -> BArray f a
replicate :: f Int -> a -> BArray f a
replicate = f Int -> a -> BArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
f Int -> a -> Array v f a
G.replicate
{-# INLINE replicate #-}
linearGenerate :: Shape f => Layout f -> (Int -> a) -> BArray f a
linearGenerate :: Layout f -> (Int -> a) -> BArray f a
linearGenerate = Layout f -> (Int -> a) -> BArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> (Int -> a) -> Array v f a
G.linearGenerate
{-# INLINE linearGenerate #-}
generate :: Shape f => Layout f -> (f Int -> a) -> BArray f a
generate :: Layout f -> (Layout f -> a) -> BArray f a
generate = Layout f -> (Layout f -> a) -> BArray f a
forall (f :: * -> *) (v :: * -> *) a.
(Shape f, Vector v a) =>
Layout f -> (Layout f -> a) -> Array v f a
G.generate
{-# INLINE generate #-}
replicateM :: (Monad m, Shape f) => Layout f -> m a -> m (BArray f a)
replicateM :: Layout f -> m a -> m (BArray f a)
replicateM = Layout f -> m a -> m (BArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> m a -> m (Array v f a)
G.replicateM
{-# INLINE replicateM #-}
generateM :: (Monad m, Shape f) => Layout f -> (f Int -> m a) -> m (BArray f a)
generateM :: Layout f -> (Layout f -> m a) -> m (BArray f a)
generateM = Layout f -> (Layout f -> m a) -> m (BArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> (Layout f -> m a) -> m (Array v f a)
G.generateM
{-# INLINE generateM #-}
linearGenerateM :: (Monad m, Shape f) => Layout f -> (Int -> m a) -> m (BArray f a)
linearGenerateM :: Layout f -> (Int -> m a) -> m (BArray f a)
linearGenerateM = Layout f -> (Int -> m a) -> m (BArray f a)
forall (m :: * -> *) (f :: * -> *) (v :: * -> *) a.
(Monad m, Shape f, Vector v a) =>
Layout f -> (Int -> m a) -> m (Array v f a)
G.linearGenerateM
{-# INLINE linearGenerateM #-}
map :: (a -> b) -> BArray f a -> BArray f b
map :: (a -> b) -> BArray f a -> BArray f b
map = (a -> b) -> BArray f a -> BArray f b
forall (v :: * -> *) a b (f :: * -> *).
(Vector v a, Vector v b) =>
(a -> b) -> Array v f a -> Array v f b
G.map
{-# INLINE map #-}
imap :: Shape f => (f Int -> a -> b) -> BArray f a -> BArray f b
imap :: (f Int -> a -> b) -> BArray f a -> BArray f b
imap = (f Int -> a -> b) -> BArray f a -> BArray f b
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b) =>
(f Int -> a -> b) -> Array v f a -> Array v f b
G.imap
{-# INLINE imap #-}
(//) :: Shape f => BArray f a -> [(f Int, a)] -> BArray f a
// :: BArray f a -> [(f Int, a)] -> BArray f a
(//) = BArray f a -> [(f Int, a)] -> BArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Array v f a -> [(f Int, a)] -> Array v f a
(G.//)
{-# INLINE (//) #-}
accum :: Shape f
=> (a -> b -> a)
-> BArray f a
-> [(f Int, b)]
-> BArray f a
accum :: (a -> b -> a) -> BArray f a -> [(f Int, b)] -> BArray f a
accum = (a -> b -> a) -> BArray f a -> [(f Int, b)] -> BArray f a
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a) =>
(a -> b -> a) -> Array v f a -> [(f Int, b)] -> Array v f a
G.accum
{-# INLINE accum #-}
zip :: Shape f
=> BArray f a
-> BArray f b
-> BArray f (a,b)
zip :: BArray f a -> BArray f b -> BArray f (a, b)
zip = BArray f a -> BArray f b -> BArray f (a, b)
forall (f :: * -> *) (v :: * -> *) a b.
(Shape f, Vector v a, Vector v b, Vector v (a, b)) =>
Array v f a -> Array v f b -> Array v f (a, b)
G.zip
zip3 :: Shape f
=> BArray f a
-> BArray f b
-> BArray f c
-> BArray f (a,b,c)
zip3 :: BArray f a -> BArray f b -> BArray f c -> BArray f (a, b, c)
zip3 = BArray f a -> BArray f b -> BArray f c -> BArray f (a, b, c)
forall (f :: * -> *) (v :: * -> *) a b c.
(Shape f, Vector v a, Vector v b, Vector v c,
Vector v (a, b, c)) =>
Array v f a -> Array v f b -> Array v f c -> Array v f (a, b, c)
G.zip3
zipWith :: Shape f
=> (a -> b -> c)
-> BArray f a
-> BArray f b
-> BArray f c
zipWith :: (a -> b -> c) -> BArray f a -> BArray f b -> BArray f c
zipWith = (a -> b -> c) -> BArray f a -> BArray f b -> BArray f c
forall (f :: * -> *) (v :: * -> *) a b c.
(Shape f, Vector v a, Vector v b, Vector v c) =>
(a -> b -> c) -> Array v f a -> Array v f b -> Array v f c
G.zipWith
{-# INLINE zipWith #-}
zipWith3 :: Shape f
=> (a -> b -> c -> d)
-> BArray f a
-> BArray f b
-> BArray f c
-> BArray f d
zipWith3 :: (a -> b -> c -> d)
-> BArray f a -> BArray f b -> BArray f c -> BArray f d
zipWith3 = (a -> b -> c -> d)
-> BArray f a -> BArray f b -> BArray f c -> BArray f d
forall (f :: * -> *) (v :: * -> *) a b c d.
(Shape f, Vector v a, Vector v b, Vector v c, Vector v d) =>
(a -> b -> c -> d)
-> Array v f a -> Array v f b -> Array v f c -> Array v f d
G.zipWith3
{-# INLINE zipWith3 #-}
izipWith :: Shape f
=> (f Int -> a -> b -> c)
-> BArray f a
-> BArray f b
-> BArray f c
izipWith :: (f Int -> a -> b -> c) -> BArray f a -> BArray f b -> BArray f c
izipWith = (f Int -> a -> b -> c) -> BArray f a -> BArray f b -> BArray f c
forall (f :: * -> *) (v :: * -> *) a b c.
(Shape f, Vector v a, Vector v b, Vector v c) =>
(f Int -> a -> b -> c) -> Array v f a -> Array v f b -> Array v f c
G.izipWith
{-# INLINE izipWith #-}
izipWith3 :: Shape f
=> (f Int -> a -> b -> c -> d)
-> BArray f a
-> BArray f b
-> BArray f c
-> BArray f d
izipWith3 :: (f Int -> a -> b -> c -> d)
-> BArray f a -> BArray f b -> BArray f c -> BArray f d
izipWith3 = (f Int -> a -> b -> c -> d)
-> BArray f a -> BArray f b -> BArray f c -> BArray f d
forall (f :: * -> *) (v :: * -> *) a b c d.
(Shape f, Vector v a, Vector v b, Vector v c, Vector v d) =>
(f Int -> a -> b -> c -> d)
-> Array v f a -> Array v f b -> Array v f c -> Array v f d
G.izipWith3
{-# INLINE izipWith3 #-}
rows :: IndexedTraversal Int (BArray V2 a) (BArray V2 b) (Vector a) (Vector b)
rows :: p (Vector a) (f (Vector b)) -> BArray V2 a -> f (BArray V2 b)
rows = p (Vector a) (f (Vector b)) -> BArray V2 a -> f (BArray V2 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
IndexedTraversal Int (Array v V2 a) (Array w V2 b) (v a) (w b)
G.rows
{-# INLINE rows #-}
ixRow :: Int -> IndexedTraversal' Int (BArray V2 a) (Vector a)
ixRow :: Int -> IndexedTraversal' Int (BArray V2 a) (Vector a)
ixRow = Int
-> p (Vector a) (f (Vector a)) -> BArray V2 a -> f (BArray V2 a)
forall (v :: * -> *) a.
Vector v a =>
Int -> IndexedTraversal' Int (Array v V2 a) (v a)
G.ixRow
{-# INLINE ixRow #-}
columns :: IndexedTraversal Int (BArray V2 a) (BArray V2 b) (Vector a) (Vector b)
columns :: p (Vector a) (f (Vector b)) -> BArray V2 a -> f (BArray V2 b)
columns = p (Vector a) (f (Vector b)) -> BArray V2 a -> f (BArray V2 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
IndexedTraversal Int (Array v V2 a) (Array w V2 b) (v a) (w b)
G.columns
{-# INLINE columns #-}
ixColumn :: Int -> IndexedTraversal' Int (BArray V2 a) (Vector a)
ixColumn :: Int -> IndexedTraversal' Int (BArray V2 a) (Vector a)
ixColumn = Int
-> p (Vector a) (f (Vector a)) -> BArray V2 a -> f (BArray V2 a)
forall (v :: * -> *) a.
Vector v a =>
Int -> IndexedTraversal' Int (Array v V2 a) (v a)
G.ixColumn
{-# INLINE ixColumn #-}
ixPlane :: ALens' (V3 Int) (V2 Int)
-> Int
-> IndexedTraversal' Int (BArray V3 a) (BArray V2 a)
ixPlane :: ALens' (V3 Int) (V2 Int)
-> Int -> IndexedTraversal' Int (BArray V3 a) (BArray V2 a)
ixPlane = ALens' (V3 Int) (V2 Int)
-> Int
-> p (BArray V2 a) (f (BArray V2 a))
-> BArray V3 a
-> f (BArray V3 a)
forall (v :: * -> *) a.
Vector v a =>
ALens' (V3 Int) (V2 Int)
-> Int -> IndexedTraversal' Int (Array v V3 a) (Array v V2 a)
G.ixPlane
{-# INLINE ixPlane #-}
planes :: ALens' (V3 Int) (V2 Int)
-> IndexedTraversal Int (BArray V3 a) (BArray V3 b) (BArray V2 a) (BArray V2 b)
planes :: ALens' (V3 Int) (V2 Int)
-> IndexedTraversal
Int (BArray V3 a) (BArray V3 b) (BArray V2 a) (BArray V2 b)
planes = ALens' (V3 Int) (V2 Int)
-> p (BArray V2 a) (f (BArray V2 b))
-> BArray V3 a
-> f (BArray V3 b)
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
ALens' (V3 Int) (V2 Int)
-> IndexedTraversal
Int (Array v V3 a) (Array w V3 b) (Array v V2 a) (Array w V2 b)
G.planes
{-# INLINE planes #-}
flattenPlane :: ALens' (V3 Int) (V2 Int)
-> (Vector a -> b)
-> BArray V3 a
-> BArray V2 b
flattenPlane :: ALens' (V3 Int) (V2 Int)
-> (Vector a -> b) -> BArray V3 a -> BArray V2 b
flattenPlane = ALens' (V3 Int) (V2 Int)
-> (Vector a -> b) -> BArray V3 a -> BArray V2 b
forall (v :: * -> *) a (w :: * -> *) b.
(Vector v a, Vector w b) =>
ALens' (V3 Int) (V2 Int)
-> (v a -> b) -> Array v V3 a -> Array w V2 b
G.flattenPlane
{-# INLINE flattenPlane #-}
unsafeOrdinals :: Shape f => [f Int] -> IndexedTraversal' (f Int) (BArray f a) a
unsafeOrdinals :: [f Int] -> IndexedTraversal' (f Int) (BArray f a) a
unsafeOrdinals = [f Int] -> p a (f a) -> BArray f a -> f (BArray f a)
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
[f Int] -> IndexedTraversal' (f Int) (Array v f a) a
G.unsafeOrdinals
{-# INLINE [0] unsafeOrdinals #-}
freeze :: PrimMonad m => BMArray f (PrimState m) a -> m (BArray f a)
freeze :: BMArray f (PrimState m) a -> m (BArray f a)
freeze = BMArray f (PrimState m) a -> m (BArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.freeze
{-# INLINE freeze #-}
thaw :: PrimMonad m => BArray f a -> m (BMArray f (PrimState m) a)
thaw :: BArray f a -> m (BMArray f (PrimState m) a)
thaw = BArray f a -> m (BMArray f (PrimState m) a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
Array v f a -> m (MArray (Mutable v) f (PrimState m) a)
G.thaw
{-# INLINE thaw #-}
unsafeFreeze :: PrimMonad m => BMArray f (PrimState m) a -> m (BArray f a)
unsafeFreeze :: BMArray f (PrimState m) a -> m (BArray f a)
unsafeFreeze = BMArray f (PrimState m) a -> m (BArray f a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
MArray (Mutable v) f (PrimState m) a -> m (Array v f a)
G.unsafeFreeze
{-# INLINE unsafeFreeze #-}
unsafeThaw :: PrimMonad m => BArray f a -> m (BMArray f (PrimState m) a)
unsafeThaw :: BArray f a -> m (BMArray f (PrimState m) a)
unsafeThaw = BArray f a -> m (BMArray f (PrimState m) a)
forall (m :: * -> *) (v :: * -> *) a (f :: * -> *).
(PrimMonad m, Vector v a) =>
Array v f a -> m (MArray (Mutable v) f (PrimState m) a)
G.unsafeThaw
{-# INLINE unsafeThaw #-}
delayed :: (Shape f, Shape k)
=> Iso (BArray f a) (BArray k b) (G.Delayed f a) (G.Delayed k b)
delayed :: Iso (BArray f a) (BArray k b) (Delayed f a) (Delayed k b)
delayed = p (Delayed f a) (f (Delayed k b))
-> p (BArray f a) (f (BArray k b))
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *) (g :: * -> *).
(Vector v a, Vector w b, Shape f, Shape g) =>
Iso (Array v f a) (Array w g b) (Delayed f a) (Delayed g b)
G.delayed
{-# INLINE delayed #-}
seqDelayed :: (Shape f, Shape k)
=> Iso (BArray f a) (BArray k b) (G.Delayed f a) (G.Delayed k b)
seqDelayed :: Iso (BArray f a) (BArray k b) (Delayed f a) (Delayed k b)
seqDelayed = p (Delayed f a) (f (Delayed k b))
-> p (BArray f a) (f (BArray k b))
forall (v :: * -> *) a (w :: * -> *) b (f :: * -> *) (g :: * -> *).
(Vector v a, Vector w b, Shape f, Shape g) =>
Iso (Array v f a) (Array w g b) (Delayed f a) (Delayed g b)
G.seqDelayed
{-# INLINE seqDelayed #-}
delay :: Shape f => BArray f a -> G.Delayed f a
delay :: BArray f a -> Delayed f a
delay = BArray f a -> Delayed f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Array v f a -> Delayed f a
G.delay
{-# INLINE delay #-}
manifest :: Shape f => G.Delayed f a -> BArray f a
manifest :: Delayed f a -> BArray f a
manifest = Delayed f a -> BArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Delayed f a -> Array v f a
G.manifest
{-# INLINE manifest #-}
seqManifest :: Shape f => G.Delayed f a -> BArray f a
seqManifest :: Delayed f a -> BArray f a
seqManifest = Delayed f a -> BArray f a
forall (v :: * -> *) a (f :: * -> *).
(Vector v a, Shape f) =>
Delayed f a -> Array v f a
G.seqManifest
{-# INLINE seqManifest #-}
affirm :: Shape f => G.Delayed f a -> G.Delayed f a
affirm :: Delayed f a -> Delayed f a
affirm = BArray f a -> Delayed f a
forall (f :: * -> *) a. Shape f => BArray f a -> Delayed f a
delay (BArray f a -> Delayed f a)
-> (Delayed f a -> BArray f a) -> Delayed f a -> Delayed f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Delayed f a -> BArray f a
forall (f :: * -> *) a. Shape f => Delayed f a -> BArray f a
manifest
{-# INLINE affirm #-}
seqAffirm :: Shape f => G.Delayed f a -> G.Delayed f a
seqAffirm :: Delayed f a -> Delayed f a
seqAffirm = BArray f a -> Delayed f a
forall (f :: * -> *) a. Shape f => BArray f a -> Delayed f a
delay (BArray f a -> Delayed f a)
-> (Delayed f a -> BArray f a) -> Delayed f a -> Delayed f a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Delayed f a -> BArray f a
forall (f :: * -> *) a. Shape f => Delayed f a -> BArray f a
seqManifest
{-# INLINE seqAffirm #-}