Portability | non-portable |
---|---|

Stability | experimental |

Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |

Generic interface to mutable vectors

- class MVector v a where
- basicLength :: v s a -> Int
- basicUnsafeSlice :: Int -> Int -> v s a -> v s a
- basicOverlaps :: v s a -> v s a -> Bool
- basicUnsafeNew :: PrimMonad m => Int -> m (v (PrimState m) a)
- basicUnsafeNewWith :: PrimMonad m => Int -> a -> m (v (PrimState m) a)
- basicUnsafeRead :: PrimMonad m => v (PrimState m) a -> Int -> m a
- basicUnsafeWrite :: PrimMonad m => v (PrimState m) a -> Int -> a -> m ()
- basicClear :: PrimMonad m => v (PrimState m) a -> m ()
- basicSet :: PrimMonad m => v (PrimState m) a -> a -> m ()
- basicUnsafeCopy :: PrimMonad m => v (PrimState m) a -> v (PrimState m) a -> m ()
- basicUnsafeGrow :: PrimMonad m => v (PrimState m) a -> Int -> m (v (PrimState m) a)

- length :: MVector v a => v s a -> Int
- overlaps :: MVector v a => v s a -> v s a -> Bool
- new :: (PrimMonad m, MVector v a) => Int -> m (v (PrimState m) a)
- newWith :: (PrimMonad m, MVector v a) => Int -> a -> m (v (PrimState m) a)
- read :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m a
- write :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m ()
- swap :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> Int -> m ()
- clear :: (PrimMonad m, MVector v a) => v (PrimState m) a -> m ()
- set :: (PrimMonad m, MVector v a) => v (PrimState m) a -> a -> m ()
- copy :: (PrimMonad m, MVector v a) => v (PrimState m) a -> v (PrimState m) a -> m ()
- grow :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m (v (PrimState m) a)
- slice :: MVector v a => Int -> Int -> v s a -> v s a
- take :: MVector v a => Int -> v s a -> v s a
- drop :: MVector v a => Int -> v s a -> v s a
- init :: MVector v a => v s a -> v s a
- tail :: MVector v a => v s a -> v s a
- unsafeSlice :: MVector v a => Int -> Int -> v s a -> v s a
- unsafeInit :: MVector v a => v s a -> v s a
- unsafeTail :: MVector v a => v s a -> v s a
- unsafeNew :: (PrimMonad m, MVector v a) => Int -> m (v (PrimState m) a)
- unsafeNewWith :: (PrimMonad m, MVector v a) => Int -> a -> m (v (PrimState m) a)
- unsafeRead :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m a
- unsafeWrite :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> a -> m ()
- unsafeSwap :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> Int -> m ()
- unsafeCopy :: (PrimMonad m, MVector v a) => v (PrimState m) a -> v (PrimState m) a -> m ()
- unsafeGrow :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m (v (PrimState m) a)
- unstream :: (PrimMonad m, MVector v a) => Stream a -> m (v (PrimState m) a)
- transform :: (PrimMonad m, MVector v a) => (MStream m a -> MStream m a) -> v (PrimState m) a -> m (v (PrimState m) a)
- unstreamR :: (PrimMonad m, MVector v a) => Stream a -> m (v (PrimState m) a)
- transformR :: (PrimMonad m, MVector v a) => (MStream m a -> MStream m a) -> v (PrimState m) a -> m (v (PrimState m) a)
- unsafeAccum :: (PrimMonad m, MVector v a) => (a -> b -> a) -> v (PrimState m) a -> Stream (Int, b) -> m ()
- accum :: (PrimMonad m, MVector v a) => (a -> b -> a) -> v (PrimState m) a -> Stream (Int, b) -> m ()
- unsafeUpdate :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Stream (Int, a) -> m ()
- update :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Stream (Int, a) -> m ()
- reverse :: (PrimMonad m, MVector v a) => v (PrimState m) a -> m ()
- unstablePartition :: forall m v a. (PrimMonad m, MVector v a) => (a -> Bool) -> v (PrimState m) a -> m Int
- unstablePartitionStream :: (PrimMonad m, MVector v a) => (a -> Bool) -> Stream a -> m (v (PrimState m) a, v (PrimState m) a)
- partitionStream :: (PrimMonad m, MVector v a) => (a -> Bool) -> Stream a -> m (v (PrimState m) a, v (PrimState m) a)

# Class of mutable vector types

Class of mutable vectors parametrised with a primitive state token.

basicLength :: v s a -> IntSource

Length of the mutable vector. This method should not be
called directly, use `length`

instead.

Yield a part of the mutable vector without copying it. This method
should not be called directly, use `unsafeSlice`

instead.

basicOverlaps :: v s a -> v s a -> BoolSource

basicUnsafeNew :: PrimMonad m => Int -> m (v (PrimState m) a)Source

Create a mutable vector of the given length. This method should not be
called directly, use `unsafeNew`

instead.

basicUnsafeNewWith :: PrimMonad m => Int -> a -> m (v (PrimState m) a)Source

Create a mutable vector of the given length and fill it with an
initial value. This method should not be called directly, use
`unsafeNewWith`

instead.

basicUnsafeRead :: PrimMonad m => v (PrimState m) a -> Int -> m aSource

Yield the element at the given position. This method should not be
called directly, use `unsafeRead`

instead.

basicUnsafeWrite :: PrimMonad m => v (PrimState m) a -> Int -> a -> m ()Source

Replace the element at the given position. This method should not be
called directly, use `unsafeWrite`

instead.

basicClear :: PrimMonad m => v (PrimState m) a -> 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. This method should not be called directly, use `clear`

instead.

basicSet :: PrimMonad m => v (PrimState m) a -> a -> m ()Source

Set all elements of the vector to the given value. This method should
not be called directly, use `set`

instead.

Copy a vector. The two vectors may not overlap. This method should not
be called directly, use `unsafeCopy`

instead.

basicUnsafeGrow :: PrimMonad m => v (PrimState m) a -> Int -> m (v (PrimState m) a)Source

Grow a vector by the given number of elements. This method should not be
called directly, use `unsafeGrow`

instead.

Prim a => MVector MVector a | |

Storable a => MVector MVector a | |

MVector MVector Bool | |

MVector MVector Char | |

MVector MVector Double | |

MVector MVector Float | |

MVector MVector Int | |

MVector MVector Int8 | |

MVector MVector Int16 | |

MVector MVector Int32 | |

MVector MVector Int64 | |

MVector MVector Word | |

MVector MVector Word8 | |

MVector MVector Word16 | |

MVector MVector Word32 | |

MVector MVector Word64 | |

MVector MVector () | |

MVector MVector a | |

(RealFloat a, Unbox a) => MVector MVector (Complex a) | |

(Unbox a, Unbox b) => MVector MVector (a, b) | |

(Unbox a, Unbox b, Unbox c) => MVector MVector (a, b, c) | |

(Unbox a, Unbox b, Unbox c, Unbox d) => MVector MVector (a, b, c, d) | |

(Unbox a, Unbox b, Unbox c, Unbox d, Unbox e) => MVector MVector (a, b, c, d, e) | |

(Unbox a, Unbox b, Unbox c, Unbox d, Unbox e, Unbox f) => MVector MVector (a, b, c, d, e, f) |

# Operations on mutable vectors

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

Create a mutable vector of the given length.

newWith :: (PrimMonad m, MVector v a) => Int -> a -> m (v (PrimState m) a)Source

Create a mutable vector of the given length and fill it with an initial value.

read :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m aSource

Yield the element at the given position.

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

Replace the element at the given position.

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

Swap the elements at the given positions.

clear :: (PrimMonad m, MVector v a) => v (PrimState m) a -> 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.

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

Set all elements of the vector to the given value.

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

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

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

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

slice :: MVector v a => Int -> Int -> v s a -> v s aSource

Yield a part of the mutable vector without copying it.

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

unsafeInit :: MVector v a => v s a -> v s aSource

unsafeTail :: MVector v a => v s a -> v s aSource

# Unsafe operations

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

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

unsafeNewWith :: (PrimMonad m, MVector v a) => Int -> a -> m (v (PrimState m) a)Source

Create a mutable vector of the given length and fill it with an initial value. The length is not checked.

unsafeRead :: (PrimMonad m, MVector v a) => v (PrimState m) a -> Int -> m aSource

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

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

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

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

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

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

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

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

# Internal operations

transform :: (PrimMonad m, MVector v a) => (MStream m a -> MStream m a) -> v (PrimState m) a -> m (v (PrimState m) a)Source

transformR :: (PrimMonad m, MVector v a) => (MStream m a -> MStream m a) -> v (PrimState m) a -> m (v (PrimState m) a)Source

unsafeAccum :: (PrimMonad m, MVector v a) => (a -> b -> a) -> v (PrimState m) a -> Stream (Int, b) -> m ()Source

accum :: (PrimMonad m, MVector v a) => (a -> b -> a) -> v (PrimState m) a -> Stream (Int, b) -> m ()Source

unstablePartition :: forall m v a. (PrimMonad m, MVector v a) => (a -> Bool) -> v (PrimState m) a -> m IntSource