-- |
-- = Priority queues
--
-- @PQueue@ is a minimum priority queue implemented using an
-- t'Data.Seqn.MSeq.MSeq'.
--
-- * It is spine-strict, and can contain only a finite number of elements.
-- * It is value-strict. It is guaranteed that if a @PQueue@ is in
--   [weak head normal form](https://wiki.haskell.org/Weak_head_normal_form)
--   (WHNF), every element of the @PQueue@ is also in WHNF.
-- * It maintains insertion order. If two elements compare equal, the one
--   which was inserted first will be removed first. Elements can also be
--   folded over in insertion order.
-- * It is a mergeable priority queue. Two queues can be concatenated
--   efficiently in logarithmic time.
--
-- It is recommended to import this module qualified to avoid name clashes.
--
-- @
-- import Data.Seqn.PQueue (PQueue)
-- import qualified Data.Seqn.PQueue as PQueue
-- @
--
module Data.Seqn.PQueue
  (
    -- * PQueue
    P.PQueue
  , P.empty
  , P.singleton
  , P.fromList
  , P.concatMap
  , P.insert
  , P.min
  , P.minView
  , P.toSortedList

    -- * Entry
  , P.Entry(..)
  , P.entryPrio
  , P.entryValue
  ) where

import qualified Data.Seqn.Internal.PQueue as P