Safe Haskell | None |
---|---|
Language | Haskell2010 |
Synopsis
- data CircularVector a = CircularVector {
- vector :: !(NonEmptyVector a)
- rotation :: !Int
- singleton :: a -> CircularVector a
- toVector :: CircularVector a -> Vector a
- toNonEmptyVector :: CircularVector a -> NonEmptyVector 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
- all :: (a -> Bool) -> CircularVector a -> Bool
- any :: (a -> Bool) -> CircularVector a -> Bool
- and :: CircularVector Bool -> Bool
- or :: CircularVector Bool -> Bool
- sum :: Num a => CircularVector a -> a
- product :: Num a => CircularVector a -> a
- maximum :: Ord a => CircularVector a -> a
- maximumBy :: (a -> a -> Ordering) -> CircularVector a -> a
- minimum :: Ord a => CircularVector a -> a
- minimumBy :: (a -> a -> Ordering) -> CircularVector a -> a
- rotateToMinimumBy :: (a -> a -> Ordering) -> CircularVector a -> CircularVector a
- rotateToMaximumBy :: (a -> a -> Ordering) -> CircularVector a -> CircularVector a
- index :: CircularVector a -> Int -> a
- head :: CircularVector a -> a
- last :: CircularVector a -> a
- zipWith :: (a -> b -> c) -> CircularVector a -> CircularVector b -> CircularVector c
- zipWith3 :: (a -> b -> c -> d) -> CircularVector a -> CircularVector b -> CircularVector c -> CircularVector d
- zip :: CircularVector a -> CircularVector b -> CircularVector (a, b)
- zip3 :: CircularVector a -> CircularVector b -> CircularVector c -> CircularVector (a, b, c)
- reverse :: CircularVector a -> CircularVector 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.
Since: 0.1
toVector :: CircularVector a -> Vector a Source #
Construct a Vector
from a CircularVector
.
Since: 0.1
toNonEmptyVector :: CircularVector a -> NonEmptyVector a Source #
Construct a NonEmptyVector
from a CircularVector
.
Since: 0.1.1
fromVector :: NonEmptyVector a -> CircularVector a Source #
Construct a CircularVector
from a NonEmptyVector
.
Since: 0.1
unsafeFromVector :: Vector a -> CircularVector a Source #
fromList :: [a] -> Maybe (CircularVector a) Source #
Construct a CircularVector
from a list.
Since: 0.1
fromListN :: Int -> [a] -> Maybe (CircularVector a) Source #
Construct a CircularVector
from a list with a size hint.
Since: 0.1
unsafeFromList :: [a] -> CircularVector a Source #
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
Since: 0.1
vec :: Lift a => [a] -> Q (TExp (CircularVector a)) Source #
Construct a CircularVector
at compile-time using
typed Template Haskell.
Since: 0.1
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 #
Since: 0.1
canonise :: Ord a => CircularVector a -> CircularVector a Source #
Since: 0.1
Folds
foldMap :: Monoid m => (a -> m) -> CircularVector a -> m Source #
Lazily-accumulating monoidal fold over a CircularVector
.
@since 0.1
foldMap' :: Monoid m => (a -> m) -> CircularVector a -> m Source #
Strictly-accumulating monoidal fold over a CircularVector
.
Since: 0.1
foldr :: (a -> b -> b) -> b -> CircularVector a -> b Source #
Since: 0.1
foldl :: (b -> a -> b) -> b -> CircularVector a -> b Source #
Since: 0.1
foldr' :: (a -> b -> b) -> b -> CircularVector a -> b Source #
Since: 0.1
foldl' :: (b -> a -> b) -> b -> CircularVector a -> b Source #
Since: 0.1
foldr1 :: (a -> a -> a) -> CircularVector a -> a Source #
Since: 0.1
foldl1 :: (a -> a -> a) -> CircularVector a -> a Source #
Since: 0.1
foldMap1 :: Semigroup m => (a -> m) -> CircularVector a -> m Source #
Lazily-accumulating semigroupoidal fold over
a CircularVector
.
Since: 0.1
foldMap1' :: Semigroup m => (a -> m) -> CircularVector a -> m Source #
Strictly-accumulating semigroupoidal fold over
a CircularVector
.
Since: 0.1
toNonEmpty :: CircularVector a -> NonEmpty a Source #
Since: 0.1
Specialized folds
all :: (a -> Bool) -> CircularVector a -> Bool Source #
O(n) Check if all elements satisfy the predicate.
Since: 0.1.1
any :: (a -> Bool) -> CircularVector a -> Bool Source #
O(n) Check if any element satisfies the predicate.
Since: 0.1.1
sum :: Num a => CircularVector a -> a Source #
O(n) Compute the sum of the elements.
Since: 0.1.1
product :: Num a => CircularVector a -> a Source #
O(n) Compute the product of the elements.
Since: 0.1.1
maximum :: Ord a => CircularVector a -> a Source #
O(n) Yield the maximum element of the circular vector.
Since: 0.1.1
maximumBy :: (a -> a -> Ordering) -> CircularVector a -> a Source #
O(n) Yield the maximum element of a circular vector according to the given comparison function.
Since: 0.1.1
minimum :: Ord a => CircularVector a -> a Source #
O(n) Yield the minimum element of the circular vector.
Since: 0.1.1
minimumBy :: (a -> a -> Ordering) -> CircularVector a -> a Source #
O(n) Yield the minimum element of a circular vector according to the given comparison function.
Since: 0.1.1
rotateToMinimumBy :: (a -> a -> Ordering) -> CircularVector a -> CircularVector a Source #
O(n) Rotate to the minimum element of the circular vector according to the given comparison function.
Since: 0.1.1
rotateToMaximumBy :: (a -> a -> Ordering) -> CircularVector a -> CircularVector a Source #
O(n) Rotate to the maximum element of the circular vector according to the given comparison function.
Since: 0.1.1
Indexing
index :: CircularVector a -> Int -> a Source #
Index into a CircularVector
. This is always total.
Since: 0.1
head :: CircularVector a -> a Source #
Get the first element of a CircularVector
. This is always total.
Since: 0.1
last :: CircularVector a -> a Source #
Get the last element of a CircularVector
. This is always total.
Since: 0.1
Zipping
zipWith :: (a -> b -> c) -> CircularVector a -> CircularVector b -> CircularVector c Source #
O(min(m,n)) Zip two circular vectors with the given function.
Since: 0.1.1
zipWith3 :: (a -> b -> c -> d) -> CircularVector a -> CircularVector b -> CircularVector c -> CircularVector d Source #
Zip three circular vectors with the given function.
Since: 0.1.1
zip :: CircularVector a -> CircularVector b -> CircularVector (a, b) Source #
O(min(n,m)) Elementwise pairing of circular vector elements.
This is a special case of zipWith
where the function argument is (,)
Since: 0.1.1
zip3 :: CircularVector a -> CircularVector b -> CircularVector c -> CircularVector (a, b, c) Source #
Zip together three circular vectors.
Since: 0.1.1
Permutations
reverse :: CircularVector a -> CircularVector a Source #
O(n) Reverse a circular vector.
Since: 0.1.1