-- 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.1

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(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>, 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
