vector-circular-0.1: circular vectors

Safe HaskellNone
LanguageHaskell2010

Data.Vector.Circular

Contents

Synopsis

Types

data CircularVector a Source #

A circular, immutable vector. This type is equivalent to cycle xs for some finite, nonempty xs, but with O(1) access and O(1) rotations. Indexing into this type is always total.

Constructors

CircularVector 

Fields

Instances
Functor CircularVector Source # 
Instance details

Defined in Data.Vector.Circular

Methods

fmap :: (a -> b) -> CircularVector a -> CircularVector b #

(<$) :: a -> CircularVector b -> CircularVector a #

Foldable CircularVector Source # 
Instance details

Defined in Data.Vector.Circular

Methods

fold :: Monoid m => CircularVector m -> m #

foldMap :: Monoid m => (a -> m) -> CircularVector a -> m #

foldr :: (a -> b -> b) -> b -> CircularVector a -> b #

foldr' :: (a -> b -> b) -> b -> CircularVector a -> b #

foldl :: (b -> a -> b) -> b -> CircularVector a -> b #

foldl' :: (b -> a -> b) -> b -> CircularVector a -> b #

foldr1 :: (a -> a -> a) -> CircularVector a -> a #

foldl1 :: (a -> a -> a) -> CircularVector a -> a #

toList :: CircularVector a -> [a] #

null :: CircularVector a -> Bool #

length :: CircularVector a -> Int #

elem :: Eq a => a -> CircularVector a -> Bool #

maximum :: Ord a => CircularVector a -> a #

minimum :: Ord a => CircularVector a -> a #

sum :: Num a => CircularVector a -> a #

product :: Num a => CircularVector a -> a #

Foldable1 CircularVector Source # 
Instance details

Defined in Data.Vector.Circular

Methods

fold1 :: Semigroup m => CircularVector m -> m #

foldMap1 :: Semigroup m => (a -> m) -> CircularVector a -> m #

toNonEmpty :: CircularVector a -> NonEmpty a #

Eq a => Eq (CircularVector a) Source # 
Instance details

Defined in Data.Vector.Circular

Ord a => Ord (CircularVector a) Source # 
Instance details

Defined in Data.Vector.Circular

Read a => Read (CircularVector a) Source # 
Instance details

Defined in Data.Vector.Circular

Show a => Show (CircularVector a) Source # 
Instance details

Defined in Data.Vector.Circular

Semigroup (CircularVector a) Source #

The Semigroup (<>) operation behaves by un-rolling the two vectors so that their rotation is 0, concatenating them, returning a new vector with a 0-rotation.

Instance details

Defined in Data.Vector.Circular

Lift a => Lift (CircularVector a) Source # 
Instance details

Defined in Data.Vector.Circular

Methods

lift :: CircularVector a -> Q Exp #

Construction

singleton :: a -> CircularVector a Source #

Construct a singleton 'CircularVector.

unsafeFromVector :: Vector a -> CircularVector a Source #

Construct a CircularVector from a Vector.

Calls error if the input vector is empty.

fromList :: [a] -> Maybe (CircularVector a) Source #

Construct a CircularVector from a list.

fromListN :: Int -> [a] -> Maybe (CircularVector a) Source #

Construct a CircularVector from a list with a size hint.

unsafeFromList :: [a] -> CircularVector a Source #

Construct a CircularVector from a list.

Calls error if the input list is empty.

unsafeFromListN :: Int -> [a] -> CircularVector a Source #

Construct a CircularVector from a list with a size hint.

Calls error if the input list is empty, or if the size hint is <= 0.

vec :: Lift a => [a] -> Q (TExp (CircularVector a)) Source #

Construct a CircularVector at compile-time using typed Template Haskell.

TODO: show examples

Rotation

rotateLeft :: Int -> CircularVector a -> CircularVector a Source #

Rotate the vector to the left by n number of elements.

Note: Left rotations start to break down due to arithmetic underflow when the size of the input vector is > maxBound Int@

rotateRight :: Int -> CircularVector a -> CircularVector a Source #

Rotate the vector to left by n number of elements.

Note: Right rotations start to break down due to arithmetic overflow when the size of the input vector is > maxBound Int@

Comparisons

leastRotation :: forall a. Ord a => Vector a -> Int Source #

Folds

foldMap :: Monoid m => (a -> m) -> CircularVector a -> m Source #

Lazily-accumulating monoidal fold over a CircularVector.

foldMap' :: Monoid m => (a -> m) -> CircularVector a -> m Source #

Strictly-accumulating monoidal fold over a CircularVector.

foldr :: (a -> b -> b) -> b -> CircularVector a -> b Source #

foldl :: (b -> a -> b) -> b -> CircularVector a -> b Source #

foldr' :: (a -> b -> b) -> b -> CircularVector a -> b Source #

foldl' :: (b -> a -> b) -> b -> CircularVector a -> b Source #

foldr1 :: (a -> a -> a) -> CircularVector a -> a Source #

foldl1 :: (a -> a -> a) -> CircularVector a -> a Source #

foldMap1 :: Semigroup m => (a -> m) -> CircularVector a -> m Source #

Lazily-accumulating semigroupoidal fold over a CircularVector.

foldMap1' :: Semigroup m => (a -> m) -> CircularVector a -> m Source #

Strictly-accumulating semigroupoidal fold over a CircularVector.

Indexing

index :: CircularVector a -> Int -> a Source #

Index into a CircularVector. This is always total.

head :: CircularVector a -> a Source #

Get the first element of a CircularVector. This is always total.

last :: CircularVector a -> a Source #

Get the last element of a CircularVector. This is always total.