compact-sequences-0.1.0.0: Stacks and queues with compact representations.

Safe HaskellTrustworthy
LanguageHaskell2010

Data.CompactSequence.Internal.Array.Safe

Synopsis

Documentation

data Mult Source #

Constructors

Twice Mult 
Mul1 

data Array (n :: Mult) a Source #

Instances
Functor (Array n) Source # 
Instance details

Defined in Data.CompactSequence.Internal.Array

Methods

fmap :: (a -> b) -> Array n a -> Array n b #

(<$) :: a -> Array n b -> Array n a #

Foldable (Array n) Source # 
Instance details

Defined in Data.CompactSequence.Internal.Array

Methods

fold :: Monoid m => Array n m -> m #

foldMap :: Monoid m => (a -> m) -> Array n a -> m #

foldr :: (a -> b -> b) -> b -> Array n a -> b #

foldr' :: (a -> b -> b) -> b -> Array n a -> b #

foldl :: (b -> a -> b) -> b -> Array n a -> b #

foldl' :: (b -> a -> b) -> b -> Array n a -> b #

foldr1 :: (a -> a -> a) -> Array n a -> a #

foldl1 :: (a -> a -> a) -> Array n a -> a #

toList :: Array n a -> [a] #

null :: Array n a -> Bool #

length :: Array n a -> Int #

elem :: Eq a => a -> Array n a -> Bool #

maximum :: Ord a => Array n a -> a #

minimum :: Ord a => Array n a -> a #

sum :: Num a => Array n a -> a #

product :: Num a => Array n a -> a #

Traversable (Array n) Source # 
Instance details

Defined in Data.CompactSequence.Internal.Array

Methods

traverse :: Applicative f => (a -> f b) -> Array n a -> f (Array n b) #

sequenceA :: Applicative f => Array n (f a) -> f (Array n a) #

mapM :: Monad m => (a -> m b) -> Array n a -> m (Array n b) #

sequence :: Monad m => Array n (m a) -> m (Array n a) #

data Size (n :: Mult) Source #

twice :: Size n -> Size (Twice n) Source #

splitArray :: Size n -> Array (Twice n) a -> (Array n a, Array n a) Source #

append :: Size n -> Array n a -> Array n a -> Array (Twice n) a Source #

Append two arrays of the same size. We take the size of the argument arrays so we can build the result array before loading the first argument array into cache. Is this the right approach? Not sure. We *certainly* don't want to just use <>, because

arraySplitListN :: Size n -> [a] -> (Array n a, [a]) Source #