module Data.Vector.Dense (
module Data.Vector.Dense.Internal,
UnsafeFreezeVector(..),
UnsafeThawVector(..),
freezeVector,
thawVector,
) where
import BLAS.Elem
import Data.Vector.Dense.Internal hiding ( V )
import qualified Data.Vector.Dense.Internal as I
import Data.Vector.Dense.IO
import Data.Vector.Dense.ST
class UnsafeFreezeVector x where
unsafeFreezeVector :: x n e -> Vector n e
instance UnsafeFreezeVector IOVector where
unsafeFreezeVector = I.V
instance UnsafeFreezeVector (STVector s) where
unsafeFreezeVector = unsafeFreezeVector . unsafeSTVectorToIOVector
class UnsafeThawVector x where
unsafeThawVector :: Vector n e -> x n e
instance UnsafeThawVector IOVector where
unsafeThawVector (I.V x) = x
instance UnsafeThawVector (STVector s) where
unsafeThawVector = unsafeIOVectorToSTVector . unsafeThawVector
freezeVector :: (ReadVector x m, WriteVector y m, UnsafeFreezeVector y, BLAS1 e) =>
x n e -> m (Vector n e)
freezeVector x = do
x' <- newCopyVector x
return (unsafeFreezeVector x')
thawVector :: (WriteVector y m, BLAS1 e) =>
Vector n e -> m (y n e)
thawVector = newCopyVector