-- | A 'HashPSQ' offers very similar performance to 'IntPSQ'. In case of
-- collisions, it uses an 'OrdPSQ' locally to solve those.
--
-- This means worst case complexity is usually given by /O(min(n,W), log n)/,
-- where /W/ is the number of bits in an 'Int'. This simplifies to /O(min(n,W))/
-- since /log n/ is always smaller than /W/ on current machines.
module Data.HashPSQ
    ( -- * Type
      HashPSQ

      -- * Query
    , null
    , size
    , member
    , lookup
    , findMin

      -- * Construction
    , empty
    , singleton

      -- * Insertion
    , insert

      -- * Delete/update
    , delete
    , deleteMin
    , alter
    , alterMin

      -- * Lists
    , fromList
    , toList
    , keys

      -- * Views
    , insertView
    , deleteView
    , minView
    , atMostView

      -- * Traversal
    , map
    , unsafeMapMonotonic
    , fold'

      -- * Unsafe operations
    , unsafeLookupIncreasePriority
    , unsafeInsertIncreasePriority
    , unsafeInsertIncreasePriorityView

      -- * Validity check
    , valid
    ) where

import           Prelude               hiding (foldr, lookup, map, null)

import           Data.HashPSQ.Internal