Documentation

data Ring a Source #

Constructors

Ring 

Fields

Generation

createRing :: MonadIO m => Int -> m (Ring a) Source #

writeLastN :: MonadIO m => Int -> Fold m a (Ring a) Source #

Note that it is not safe to return a reference to the mutable Ring using a scan as the Ring is continuously getting mutated. You could however copy out the Ring.

Modification

seek :: MonadIO m => Int -> Ring a -> m (Ring a) Source #

Move the ring head clockwise (+ve adj) or counter clockwise (-ve adj) by the given amount.

Conversion

toMutArray :: MonadIO m => Int -> Int -> Ring a -> m (MutArray a) Source #

toMutArray rignHeadAdjustment lengthToRead ring. Convert the ring into a boxed mutable array. Note that the returned MutArray shares the same underlying memory as the Ring, the user of this API needs to ensure that the ring is not mutated during and after the conversion.

copyToMutArray :: MonadIO m => Int -> Int -> Ring a -> m (MutArray a) Source #

Copy out the mutable ring to a mutable Array.

toStreamWith :: Int -> Ring a -> Stream m a Source #

Seek by n and then read the entire ring. Use take on the stream to restrict the reads.