rio-0.1.8.0: A standard library for Haskell

Safe Haskell | None
Language | Haskell2010

RIO.Vector.Boxed.Unsafe

Contents

- Accessors
  - Indexing
  - Monadic indexing
  - Extracting subvectors
- Modifying vectors
  - Bulk updates
  - Accumulations
  - Permutations
- Conversions
  - Mutable vectors

Synopsis

- unsafeIndex :: Vector a -> Int -> a
- unsafeHead :: Vector a -> a
- unsafeLast :: Vector a -> a
- unsafeIndexM :: Monad m => Vector a -> Int -> m a
- unsafeHeadM :: Monad m => Vector a -> m a
- unsafeLastM :: Monad m => Vector a -> m a
- unsafeSlice :: Int -> Int -> Vector a -> Vector a
- unsafeInit :: Vector a -> Vector a
- unsafeTail :: Vector a -> Vector a
- unsafeTake :: Int -> Vector a -> Vector a
- unsafeDrop :: Int -> Vector a -> Vector a
- unsafeUpd :: Vector a -> [(Int, a)] -> Vector a
- unsafeUpdate :: Vector a -> Vector (Int, a) -> Vector a
- unsafeUpdate_ :: Vector a -> Vector Int -> Vector a -> Vector a
- unsafeAccum :: (a -> b -> a) -> Vector a -> [(Int, b)] -> Vector a
- unsafeAccumulate :: (a -> b -> a) -> Vector a -> Vector (Int, b) -> Vector a
- unsafeAccumulate_ :: (a -> b -> a) -> Vector a -> Vector Int -> Vector b -> Vector a
- unsafeBackpermute :: Vector a -> Vector Int -> Vector a
- unsafeFreeze :: PrimMonad m => MVector (PrimState m) a -> m (Vector a)
- unsafeThaw :: PrimMonad m => Vector a -> m (MVector (PrimState m) a)
- unsafeCopy :: PrimMonad m => MVector (PrimState m) a -> Vector a -> m ()

# Accessors

## Indexing

unsafeIndex :: Vector a -> Int -> a Source #

O(1) Unsafe indexing without bounds checking

unsafeHead :: Vector a -> a Source #

O(1) First element without checking if the vector is empty

unsafeLast :: Vector a -> a Source #

O(1) Last element without checking if the vector is empty

## Monadic indexing

unsafeIndexM :: Monad m => Vector a -> Int -> m a Source #

O(1) Indexing in a monad without bounds checks. See `indexM` for an explanation of why this is useful.

unsafeHeadM :: Monad m => Vector a -> m a Source #

O(1) First element in a monad without checking for empty vectors. See `indexM` for an explanation of why this is useful.

unsafeLastM :: Monad m => Vector a -> m a Source #

O(1) Last element in a monad without checking for empty vectors. See `indexM` for an explanation of why this is useful.

## Extracting subvectors

unsafeSlice Source #

Arguments

:: Int | `i` starting index
-> Int | `n` length
-> Vector a |
-> Vector a |

O(1) Yield a slice of the vector without copying. The vector must contain at least `i+n` elements but this is not checked.

unsafeInit :: Vector a -> Vector a Source #

O(1) Yield all but the last element without copying. The vector may not be empty but this is not checked.

unsafeTail :: Vector a -> Vector a Source #

O(1) Yield all but the first element without copying. The vector may not be empty but this is not checked.

unsafeTake :: Int -> Vector a -> Vector a Source #

O(1) Yield the first `n` elements without copying. The vector must contain at least `n` elements but this is not checked.

unsafeDrop :: Int -> Vector a -> Vector a Source #

O(1) Yield all but the first `n` elements without copying. The vector must contain at least `n` elements but this is not checked.

# Modifying vectors

## Bulk updates

unsafeUpd :: Vector a -> [(Int, a)] -> Vector a Source #

Same as (`//`) but without bounds checking.

unsafeUpdate :: Vector a -> Vector (Int, a) -> Vector a Source #

Same as `update` but without bounds checking.

unsafeUpdate_ :: Vector a -> Vector Int -> Vector a -> Vector a Source #

Same as `update_` but without bounds checking.

## Accumulations

unsafeAccum :: (a -> b -> a) -> Vector a -> [(Int, b)] -> Vector a Source #

Same as `accum` but without bounds checking.

unsafeAccumulate :: (a -> b -> a) -> Vector a -> Vector (Int, b) -> Vector a Source #

Same as `accumulate` but without bounds checking.

unsafeAccumulate_ :: (a -> b -> a) -> Vector a -> Vector Int -> Vector b -> Vector a Source #

Same as `accumulate_` but without bounds checking.

## Permutations

unsafeBackpermute :: Vector a -> Vector Int -> Vector a Source #

Same as `backpermute` but without bounds checking.

# Conversions

## Mutable vectors

unsafeFreeze :: PrimMonad m => MVector (PrimState m) a -> m (Vector a) Source #

O(1) Unsafe convert a mutable vector to an immutable one without copying. The mutable vector may not be used after this operation.

unsafeThaw :: PrimMonad m => Vector a -> m (MVector (PrimState m) a) Source #

O(1) Unsafely convert an immutable vector to a mutable one without copying. The immutable vector may not be used after this operation.

unsafeCopy :: PrimMonad m => MVector (PrimState m) a -> Vector a -> m () Source #

O(n) Copy an immutable vector into a mutable one. The two vectors must have the same length. This is not checked.