Safe Haskell | None |
---|---|

Language | Haskell98 |

- data MVector :: (* -> * -> *) -> (* -> * -> *) -> * -> * -> *
- type IOVector u v = MVector u v RealWorld
- type STVector = MVector
- length :: MVector u a => MVector u v s (a, b) -> Int
- null :: MVector u a => MVector u v s (a, b) -> Bool
- slice :: (MVector u a, MVector v b) => Int -> Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- init :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b)
- tail :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b)
- take :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- drop :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- unsafeSlice :: (MVector u a, MVector v b) => Int -> Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- unsafeInit :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b)
- unsafeTail :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b)
- unsafeTake :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- unsafeDrop :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b)
- overlaps :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b) -> Bool
- new :: (PrimMonad m, MVector u a, MVector v b) => Int -> m (MVector u v (PrimState m) (a, b))
- unsafeNew :: (PrimMonad m, MVector u a, MVector v b) => Int -> m (MVector u v (PrimState m) (a, b))
- replicate :: (PrimMonad m, MVector u a, MVector v b) => Int -> (a, b) -> m (MVector u v (PrimState m) (a, b))
- clone :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> m (MVector u v (PrimState m) (a, b))
- grow :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (MVector u v (PrimState m) (a, b))
- unsafeGrow :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (MVector u v (PrimState m) (a, b))
- clear :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> m ()
- read :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (a, b)
- write :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> (a, b) -> m ()
- swap :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> Int -> m ()
- unsafeRead :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (a, b)
- unsafeWrite :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> (a, b) -> m ()
- unsafeSwap :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> Int -> m ()
- set :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> (a, b) -> m ()
- copy :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> MVector u v (PrimState m) (a, b) -> m ()
- unsafeCopy :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> MVector u v (PrimState m) (a, b) -> m ()
- unsafeZip :: u s a -> v s b -> MVector u v s (a, b)
- projectFst :: MVector u v s (a, b) -> u s a
- projectSnd :: MVector u v s (a, b) -> v s b
- newWith :: (PrimMonad m, MVector u a, MVector v b) => Int -> (a, b) -> m (MVector u v (PrimState m) (a, b))
- unsafeNewWith :: (PrimMonad m, MVector u a, MVector v b) => Int -> (a, b) -> m (MVector u v (PrimState m) (a, b))

# Documentation

# Accessors

## Length information

## Extracting subvectors

slice :: (MVector u a, MVector v b) => Int -> Int -> MVector u v s (a, b) -> MVector u v s (a, b) Source #

Yield a part of the mutable vector without copying it.

:: (MVector u a, MVector v b) | |

=> Int | starting index |

-> Int | length of the slice |

-> MVector u v s (a, b) | |

-> MVector u v s (a, b) |

Yield a part of the mutable vector without copying it. No bounds checks are performed.

unsafeTake :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b) Source #

unsafeDrop :: (MVector u a, MVector v b) => Int -> MVector u v s (a, b) -> MVector u v s (a, b) Source #

## Overlapping

overlaps :: (MVector u a, MVector v b) => MVector u v s (a, b) -> MVector u v s (a, b) -> Bool Source #

# Construction

## Initialisation

new :: (PrimMonad m, MVector u a, MVector v b) => Int -> m (MVector u v (PrimState m) (a, b)) Source #

Create a mutable vector of the given length.

unsafeNew :: (PrimMonad m, MVector u a, MVector v b) => Int -> m (MVector u v (PrimState m) (a, b)) Source #

Create a mutable vector of the given length. The length is not checked.

replicate :: (PrimMonad m, MVector u a, MVector v b) => Int -> (a, b) -> m (MVector u v (PrimState m) (a, b)) Source #

Create a mutable vector of the given length (0 if the length is negative) and fill it with an initial value.

clone :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> m (MVector u v (PrimState m) (a, b)) Source #

Create a copy of a mutable vector.

## Growing

grow :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (MVector u v (PrimState m) (a, b)) Source #

Grow a vector by the given number of elements. The number must be positive.

unsafeGrow :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (MVector u v (PrimState m) (a, b)) Source #

Grow a vector by the given number of elements. The number must be positive but this is not checked.

## Restricting memory usage

clear :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> m () Source #

Reset all elements of the vector to some undefined value, clearing all references to external objects. This is usually a noop for unboxed vectors.

# Accessing individual elements

read :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (a, b) Source #

Yield the element at the given position.

write :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> (a, b) -> m () Source #

Replace the element at the given position.

swap :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> Int -> m () Source #

Swap the elements at the given positions.

unsafeRead :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> m (a, b) Source #

Yield the element at the given position. No bounds checks are performed.

unsafeWrite :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> (a, b) -> m () Source #

Replace the element at the given position. No bounds checks are performed.

unsafeSwap :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> Int -> Int -> m () Source #

Swap the elements at the given positions. No bounds checks are performed.

# Modifying vectors

## Filling and copying

set :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> (a, b) -> m () Source #

Set all elements of the vector to the given value.

copy :: (PrimMonad m, MVector u a, MVector v b) => MVector u v (PrimState m) (a, b) -> MVector u v (PrimState m) (a, b) -> m () Source #

Copy a vector. The two vectors must have the same length and may not overlap.

:: (PrimMonad m, MVector u a, MVector v b) | |

=> MVector u v (PrimState m) (a, b) | target |

-> MVector u v (PrimState m) (a, b) | source |

-> m () |

Copy a vector. The two vectors must have the same length and may not overlap. This is not checked.

# Unsafe Construction and deconstruction

unsafeZip :: u s a -> v s b -> MVector u v s (a, b) Source #

The mutable vectors are assumed to be of the same length and to not overlap. This is not checked.

projectFst :: MVector u v s (a, b) -> u s a Source #

projectSnd :: MVector u v s (a, b) -> v s b Source #