-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/
-- | circular vectors
--
-- nonempty circular vector data structure library. indexing always total
@package vector-circular
@version 0.1
module Data.Vector.Circular
-- | 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.
data CircularVector a
CircularVector :: {-# UNPACK #-} !NonEmptyVector a -> {-# UNPACK #-} !Int -> CircularVector a
[vector] :: CircularVector a -> {-# UNPACK #-} !NonEmptyVector a
[rotation] :: CircularVector a -> {-# UNPACK #-} !Int
-- | Construct a singleton 'CircularVector.
singleton :: a -> CircularVector a
-- | Construct a Vector from a CircularVector.
toVector :: CircularVector a -> Vector a
-- | Construct a CircularVector from a NonEmptyVector.
fromVector :: NonEmptyVector a -> CircularVector a
-- | Construct a CircularVector from a Vector.
--
-- Calls error if the input vector is empty.
unsafeFromVector :: Vector a -> CircularVector a
-- | Construct a CircularVector from a list.
fromList :: [a] -> Maybe (CircularVector a)
-- | Construct a CircularVector from a list with a size hint.
fromListN :: Int -> [a] -> Maybe (CircularVector a)
-- | Construct a CircularVector from a list.
--
-- Calls error if the input list is empty.
unsafeFromList :: [a] -> CircularVector a
-- | 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.
unsafeFromListN :: Int -> [a] -> CircularVector a
-- | Construct a CircularVector at compile-time using typed Template
-- Haskell.
--
-- TODO: show examples
vec :: Lift a => [a] -> Q (TExp (CircularVector a))
-- | 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@
rotateLeft :: Int -> CircularVector a -> CircularVector a
-- | 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@
rotateRight :: Int -> CircularVector a -> CircularVector a
equivalent :: Ord a => CircularVector a -> CircularVector a -> Bool
canonise :: Ord a => CircularVector a -> CircularVector a
leastRotation :: forall a. Ord a => Vector a -> Int
-- | Lazily-accumulating monoidal fold over a CircularVector.
foldMap :: Monoid m => (a -> m) -> CircularVector a -> m
-- | Strictly-accumulating monoidal fold over a CircularVector.
foldMap' :: Monoid m => (a -> m) -> CircularVector a -> m
foldr :: (a -> b -> b) -> b -> CircularVector a -> b
foldl :: (b -> a -> b) -> b -> CircularVector a -> b
foldr' :: (a -> b -> 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
-- | Lazily-accumulating semigroupoidal fold over a CircularVector.
foldMap1 :: Semigroup m => (a -> m) -> CircularVector a -> m
-- | Strictly-accumulating semigroupoidal fold over a
-- CircularVector.
foldMap1' :: Semigroup m => (a -> m) -> CircularVector a -> m
toNonEmpty :: CircularVector a -> NonEmpty a
-- | Index into a CircularVector. This is always total.
index :: CircularVector a -> Int -> a
-- | Get the first element of a CircularVector. This is always
-- total.
head :: CircularVector a -> a
-- | Get the last element of a CircularVector. This is always total.
last :: CircularVector a -> a
instance GHC.Base.Functor Data.Vector.Circular.CircularVector
instance GHC.Read.Read a => GHC.Read.Read (Data.Vector.Circular.CircularVector a)
instance GHC.Show.Show a => GHC.Show.Show (Data.Vector.Circular.CircularVector a)
instance GHC.Classes.Ord a => GHC.Classes.Ord (Data.Vector.Circular.CircularVector a)
instance GHC.Classes.Eq a => GHC.Classes.Eq (Data.Vector.Circular.CircularVector a)
instance GHC.Base.Semigroup (Data.Vector.Circular.CircularVector a)
instance Data.Foldable.Foldable Data.Vector.Circular.CircularVector
instance Data.Semigroup.Foldable.Class.Foldable1 Data.Vector.Circular.CircularVector
instance Language.Haskell.TH.Syntax.Lift a => Language.Haskell.TH.Syntax.Lift (Data.Vector.Circular.CircularVector a)