Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data CircularVector a = CircularVector {
- vector :: !(NonEmptyVector a)
- rotation :: !Int
- singleton :: a -> CircularVector a
- toVector :: CircularVector a -> Vector a
- fromVector :: NonEmptyVector a -> CircularVector a
- unsafeFromVector :: Vector a -> CircularVector a
- fromList :: [a] -> Maybe (CircularVector a)
- fromListN :: Int -> [a] -> Maybe (CircularVector a)
- unsafeFromList :: [a] -> CircularVector a
- unsafeFromListN :: Int -> [a] -> CircularVector a
- vec :: Lift a => [a] -> Q (TExp (CircularVector a))
- rotateLeft :: Int -> CircularVector a -> CircularVector a
- 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
- foldMap :: Monoid m => (a -> m) -> CircularVector a -> m
- 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
- foldMap1 :: Semigroup m => (a -> m) -> CircularVector a -> m
- foldMap1' :: Semigroup m => (a -> m) -> CircularVector a -> m
- toNonEmpty :: CircularVector a -> NonEmpty a
- index :: CircularVector a -> Int -> a
- head :: CircularVector a -> a
- last :: CircularVector a -> a
Types
data CircularVector a Source #
A circular, immutable vector. This type is equivalent to
for some finite, nonempty cycle
xsxs
, but
with O(1) access and O(1) rotations. Indexing
into this type is always total.
CircularVector | |
|
Instances
Construction
singleton :: a -> CircularVector a Source #
Construct a singleton 'CircularVector.
toVector :: CircularVector a -> Vector a Source #
Construct a Vector
from a CircularVector
.
fromVector :: NonEmptyVector a -> CircularVector a Source #
Construct a CircularVector
from a NonEmptyVector
.
unsafeFromVector :: Vector a -> CircularVector a Source #
Construct a CircularVector
from a Vector
.
Calls
if the input vector is empty.error
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
if the input list is empty.error
unsafeFromListN :: Int -> [a] -> CircularVector a Source #
Construct a CircularVector
from a list with a size hint.
Calls
if the input list is empty, or
if the size hint is error
.<=
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 #
rotateRight :: Int -> CircularVector a -> CircularVector a Source #
Comparisons
equivalent :: Ord a => CircularVector a -> CircularVector a -> Bool Source #
canonise :: Ord a => CircularVector a -> CircularVector a 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
.
toNonEmpty :: CircularVector a -> NonEmpty a Source #
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.