diff options
-rw-r--r-- | src/Data/Array/Nested.hs | 6 | ||||
-rw-r--r-- | src/Data/Array/Nested/Internal.hs | 18 |
2 files changed, 21 insertions, 3 deletions
diff --git a/src/Data/Array/Nested.hs b/src/Data/Array/Nested.hs index 758356c..6bc3b05 100644 --- a/src/Data/Array/Nested.hs +++ b/src/Data/Array/Nested.hs @@ -7,7 +7,7 @@ module Data.Array.Nested ( IxR(.., ZIR, (:.:)), IIxR, knownIxR, ShR(.., ZSR, (:$:)), knownShR, rshape, rindex, rindexPartial, rgenerate, rsumOuter1, - rtranspose, rappend, rscalar, rfromVector, runScalar, + rtranspose, rappend, rscalar, rfromVector, rtoVector, runScalar, rconstant, rfromList, rfromList1, rtoList, rtoList1, rslice, -- ** Lifting orthotope operations to 'Ranked' arrays @@ -19,7 +19,7 @@ module Data.Array.Nested ( IxS(.., ZIS, (:.$)), IIxS, ShS(..), KnownShape(..), sshape, sindex, sindexPartial, sgenerate, ssumOuter1, - stranspose, sappend, sscalar, sfromVector, sunScalar, + stranspose, sappend, sscalar, sfromVector, stoVector, sunScalar, sconstant, sfromList, sfromList1, stoList, stoList1, sslice, -- ** Lifting orthotope operations to 'Shaped' arrays @@ -29,7 +29,7 @@ module Data.Array.Nested ( Mixed, IxX(..), IIxX, KnownShapeX(..), StaticShX(..), - mgenerate, mtranspose, mappend, mfromVector, munScalar, + mgenerate, mtranspose, mappend, mfromVector, mtoVector, munScalar, mconstant, mfromList1, mtoList1, mslice, -- * Array elements diff --git a/src/Data/Array/Nested/Internal.hs b/src/Data/Array/Nested/Internal.hs index 29592ac..3084e98 100644 --- a/src/Data/Array/Nested/Internal.hs +++ b/src/Data/Array/Nested/Internal.hs @@ -512,6 +512,12 @@ mfromVectorP sh v = M_Primitive (X.fromVector sh v) mfromVector :: forall sh a. (KnownShapeX sh, Storable a, PrimElt a) => IShX sh -> VS.Vector a -> Mixed sh a mfromVector sh v = fromPrimitive (mfromVectorP sh v) +mtoVectorP :: Storable a => Mixed sh (Primitive a) -> VS.Vector a +mtoVectorP (M_Primitive v) = X.toVector v + +mtoVector :: (Storable a, PrimElt a) => Mixed sh a -> VS.Vector a +mtoVector arr = mtoVectorP (coerce toPrimitive arr) + mfromList1 :: (KnownShapeX '[n], Elt a) => NonEmpty a -> Mixed '[n] a mfromList1 = mfromList . fmap mscalar @@ -1036,6 +1042,12 @@ rfromVectorP sh v rfromVector :: forall n a. (KnownINat n, Storable a, PrimElt a) => IShR n -> VS.Vector a -> Ranked n a rfromVector sh v = coerce fromPrimitive (rfromVectorP sh v) +rtoVectorP :: Storable a => Ranked n (Primitive a) -> VS.Vector a +rtoVectorP = coerce mtoVectorP + +rtoVector :: (Storable a, PrimElt a) => Ranked n a -> VS.Vector a +rtoVector = coerce mtoVector + rfromList :: forall n a. (KnownINat n, Elt a) => NonEmpty (Ranked n a) -> Ranked (S n) a rfromList l | Dict <- lemKnownReplicate (Proxy @n) @@ -1236,6 +1248,12 @@ sfromVectorP v sfromVector :: forall sh a. (KnownShape sh, Storable a, PrimElt a) => VS.Vector a -> Shaped sh a sfromVector v = coerce fromPrimitive (sfromVectorP @sh @a v) +stoVectorP :: Storable a => Shaped sh (Primitive a) -> VS.Vector a +stoVectorP = coerce mtoVectorP + +stoVector :: (Storable a, PrimElt a) => Shaped sh a -> VS.Vector a +stoVector = coerce mtoVector + sfromList :: forall n sh a. (KnownNat n, KnownShape sh, Elt a) => NonEmpty (Shaped sh a) -> Shaped (n : sh) a sfromList l |