    {-# LANGUAGE Safe #-}

    ------------------------------------------------------------------------
    -- |
    -- Module      :  Data.HashMap.Strict
    -- Copyright   :  2010-2012 Johan Tibell
    -- License     :  BSD-style
    -- Maintainer  :  johan.tibell@gmail.com
    -- Stability   :  provisional
    -- Portability :  portable
    --
    -- A map from /hashable/ keys to values.  A map cannot contain
    -- duplicate keys; each key can map to at most one value.  A 'HashMap'
    -- makes no guarantees as to the order of its elements.
    --
    -- The implementation is based on /hash array mapped tries/.  A
    -- 'HashMap' is often faster than other tree-based set types,
    -- especially when key comparison is expensive, as in the case of
    -- strings.
    --
    -- Many operations have a average-case complexity of \(O(\log n)\).  The
    -- implementation uses a large base (i.e. 16 or 32) so in practice these
    -- operations are constant time.
    module Data.HashMap.Strict
        (
          -- * Strictness properties
          -- $strictness

          HashMap

          -- * Construction
        , empty
        , singleton

          -- * Basic interface
        , null
        , size
        , member
        , lookup
        , (!?)
        , findWithDefault
        , lookupDefault
        , (!)
        , insert
        , insertWith
        , delete
        , adjust
        , update
        , alter
        , alterF
        , isSubmapOf
        , isSubmapOfBy

          -- * Combine
          -- ** Union
        , union
        , unionWith
        , unionWithKey
        , unions

        -- ** Compose
        , compose

          -- * Transformations
        , map
        , mapWithKey
        , traverseWithKey
        , mapKeys

          -- * Difference and intersection
        , difference
        , differenceWith
        , intersection
        , intersectionWith
        , intersectionWithKey

          -- * Folds
        , foldMapWithKey
        , foldr
        , foldl
        , foldr'
        , foldl'
        , foldrWithKey'
        , foldlWithKey'
        , foldrWithKey
        , foldlWithKey

          -- * Filter
        , filter
        , filterWithKey
        , mapMaybe
        , mapMaybeWithKey

          -- * Conversions
        , keys
        , elems

          -- ** Lists
        , toList
        , fromList
        , fromListWith
        , fromListWithKey

          -- ** HashSets
        , HS.keysSet
        ) where

    import Data.HashMap.Internal.Strict
    import Prelude                      ()

    import qualified Data.HashSet.Internal as HS

    -- $strictness
    --
    -- This module satisfies the following strictness properties:
    --
    -- 1. Key arguments are evaluated to WHNF;
    --
    -- 2. Keys and values are evaluated to WHNF before they are stored in
    --    the map.