unison-util-rope-0.0.0
Safe HaskellNone
LanguageHaskell2010

Unison.Util.Deque

Description

A strict finger tree: see Unison.Util.Deque.Internal, which has the implementation and also exports the parts that Unison.Util.Rope shares.

Synopsis

The type

data Deque a Source #

Instances

Instances details
Eq1 Deque Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

liftEq :: (a -> b -> Bool) -> Deque a -> Deque b -> Bool #

Ord1 Deque Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

liftCompare :: (a -> b -> Ordering) -> Deque a -> Deque b -> Ordering #

Show1 Deque Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> Deque a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [Deque a] -> ShowS #

Functor Deque Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

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

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

Foldable Deque Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

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

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

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

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

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

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

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

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

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

toList :: Deque a -> [a] #

null :: Deque a -> Bool #

length :: Deque a -> Int #

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

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

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

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

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

Traversable Deque Source #

Rebuilds the sequence. O(n).

Instance details

Defined in Unison.Util.Deque.Internal

Methods

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

sequenceA :: Applicative f => Deque (f a) -> f (Deque a) #

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

sequence :: Monad m => Deque (m a) -> m (Deque a) #

NFData a => NFData (Deque a) Source #

The structure is always evaluated; this evaluates the elements fully.

Instance details

Defined in Unison.Util.Deque.Internal

Methods

rnf :: Deque a -> () #

Monoid (Deque a) Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

mempty :: Deque a #

mappend :: Deque a -> Deque a -> Deque a #

mconcat :: [Deque a] -> Deque a #

Semigroup (Deque a) Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Methods

(<>) :: Deque a -> Deque a -> Deque a #

sconcat :: NonEmpty (Deque a) -> Deque a #

stimes :: Integral b => b -> Deque a -> Deque a #

IsList (Deque a) Source # 
Instance details

Defined in Unison.Util.Deque.Internal

Associated Types

type Item (Deque a) 
Instance details

Defined in Unison.Util.Deque.Internal

type Item (Deque a) = a

Methods

fromList :: [Item (Deque a)] -> Deque a #

fromListN :: Int -> [Item (Deque a)] -> Deque a #

toList :: Deque a -> [Item (Deque a)] #

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

Defined in Unison.Util.Deque.Internal

Methods

showsPrec :: Int -> Deque a -> ShowS #

show :: Deque a -> String #

showList :: [Deque a] -> ShowS #

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

Defined in Unison.Util.Deque.Internal

Methods

(==) :: Deque a -> Deque a -> Bool #

(/=) :: Deque a -> Deque a -> Bool #

Ord a => Ord (Deque a) Source #

Lexicographic, as for lists.

Instance details

Defined in Unison.Util.Deque.Internal

Methods

compare :: Deque a -> Deque a -> Ordering #

(<) :: Deque a -> Deque a -> Bool #

(<=) :: Deque a -> Deque a -> Bool #

(>) :: Deque a -> Deque a -> Bool #

(>=) :: Deque a -> Deque a -> Bool #

max :: Deque a -> Deque a -> Deque a #

min :: Deque a -> Deque a -> Deque a #

type Item (Deque a) Source # 
Instance details

Defined in Unison.Util.Deque.Internal

type Item (Deque a) = a

type Seq = Deque Source #

pattern Empty :: Deque a Source #

pattern (:<|) :: a -> Deque a -> Deque a infixr 5 Source #

pattern (:|>) :: Deque a -> a -> Deque a infixl 5 Source #

Construction

cons :: a -> Deque a -> Deque a Source #

snoc :: Deque a -> a -> Deque a Source #

append :: Deque a -> Deque a -> Deque a Source #

(<|) :: a -> Deque a -> Deque a infixr 5 Source #

(|>) :: Deque a -> a -> Deque a infixl 5 Source #

(><) :: Deque a -> Deque a -> Deque a infixr 5 Source #

fromList :: [a] -> Deque a Source #

O(n). A fold, so that it fuses with a list that is being produced.

fromListN :: Int -> [a] -> Deque a Source #

fromList for a list whose length is known. O(n). Exactly n elements are taken; a shorter list is an error. (unsafeFromListN is the same without the check, for a caller that built the list to length.)

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

fromListN for a list known to have exactly n elements. O(n). Builds the levels directly: each gets a prefix of two to nine items and a suffix of five, and what is between them goes, in nodes of eight, to the level below. The count is trusted: with more elements than n the suffix holds them all while the packed count says five, and a later append writes outside an array.

fromFunction :: Int -> (Int -> a) -> Deque a Source #

fromFunction n f is f 0, f 1, ..., f (n - 1).

Queries

lookup :: Int -> Deque a -> Maybe a Source #

toList :: Deque a -> [a] Source #

The elements in order. Lazy: the list is produced as it is consumed.

Taking apart

uncons :: Deque a -> Maybe (a, Deque a) Source #

unsnoc :: Deque a -> Maybe (Deque a, a) Source #

take :: Int -> Deque a -> Deque a Source #

drop :: Int -> Deque a -> Deque a Source #

splitAt :: Int -> Deque a -> (Deque a, Deque a) Source #

splitAt i d = (take i d, drop i d)

Whole-sequence transformations (these rebuild the sequence)

sort :: Ord a => Deque a -> Deque a Source #

A stable sort. O(n log n); goes through a list.

sortBy :: (a -> a -> Ordering) -> Deque a -> Deque a Source #

unstableSort :: Ord a => Deque a -> Deque a Source #

The same as sort here; Data.Sequence has both.

unstableSortBy :: (a -> a -> Ordering) -> Deque a -> Deque a Source #

intersperse :: a -> Deque a -> Deque a Source #

For tests