-- Hoogle documentation, generated by Haddock
-- See Hoogle, http://www.haskell.org/hoogle/


-- | Double-ended queue
--   
--   An implementation of Double-Ended Queue (aka Dequeue or Deque) based
--   on the head-tail linked list.
@package deque
@version 0.2.7

module Deque

-- | Double-ended queue (aka Dequeue or Deque) based on the head-tail
--   linked list. Can be cycled. See <a>shiftLeft</a> and
--   <a>shiftRight</a>.
data Deque a
Deque :: [a] -> [a] -> Deque a

-- | <i>O(1)</i>. <a>toList</a> is available from the <a>Foldable</a>
--   instance.
fromList :: [a] -> Deque a

-- | <i>O(n)</i>. Leave only the first elements satisfying the predicate.
takeWhile :: (a -> Bool) -> Deque a -> Deque a

-- | <i>O(n)</i>. Drop the first elements satisfying the predicate.
dropWhile :: (a -> Bool) -> Deque a -> Deque a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
--   
--   <pre>
--   λ toList . shiftLeft $ fromList [1,2,3]
--   [2,3,1]
--   </pre>
shiftLeft :: Deque a -> Deque a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
--   
--   <pre>
--   λ toList . shiftRight $ fromList [1,2,3]
--   [3,1,2]
--   </pre>
shiftRight :: Deque a -> Deque a

-- | <i>O(1)</i>. Prepend an element.
cons :: a -> Deque a -> Deque a

-- | <i>O(1)</i>. Append an element.
snoc :: a -> Deque a -> Deque a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
uncons :: Deque a -> Maybe (a, Deque a)

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
unsnoc :: Deque a -> Maybe (a, Deque a)

-- | <i>O(n)</i>.
prepend :: Deque a -> Deque a -> Deque a

-- | <i>O(1)</i>.
reverse :: Deque a -> Deque a

-- | <i>O(1)</i>.
null :: Deque a -> Bool

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
head :: Deque a -> Maybe a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
tail :: Deque a -> Deque a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
init :: Deque a -> Deque a

-- | <i>O(1)</i>, occasionally <i>O(n)</i>.
last :: Deque a -> Maybe a
instance GHC.Classes.Eq a => GHC.Classes.Eq (Deque.Deque a)
instance GHC.Show.Show a => GHC.Show.Show (Deque.Deque a)
instance GHC.Base.Functor Deque.Deque
instance GHC.Base.Semigroup (Deque.Deque a)
instance GHC.Base.Monoid (Deque.Deque a)
instance Data.Foldable.Foldable Deque.Deque
instance Data.Traversable.Traversable Deque.Deque
instance GHC.Base.Applicative Deque.Deque
instance GHC.Base.Monad Deque.Deque
instance GHC.Base.Alternative Deque.Deque
instance GHC.Base.MonadPlus Deque.Deque
instance Control.Monad.Fail.MonadFail Deque.Deque
