-- |
-- An implementation of heterogeneous tree-map by open unions.
-- This module uses the @Data.Map@ module inside,
-- see also <https://hackage.haskell.org/package/containers>.
--
module Data.UnionMap (
  -- * Map type
    UnionMap

  -- * Operators
  , (\\), (!)

  -- * Construction
  , empty
  , singleton

  -- * Query
  , null
  , size
  , member
  , notMember
  , lookup
  , lookupU
  , find
  , findU
  , findWithDefault

  -- ** Insertion
  , insert
  , insertWith
  , insertWithKey
  -- ** Delete\/Update
  , delete
  , adjust
  , adjustWithKey
  , update
  , updateWithKey

  -- * Set Operation
  , union
  , unions
  , difference
  , intersection
  -- * Conversion
  , keys
  , rebuild

  -- * Map
  , mapU
  , mapWithKeyU
  , mapU'
  , mapWithKeyU'
  -- * Filter
  , filterU
  , filterWithKeyU
  -- * Folds
  , foldrU
  , foldrWithKeyU
  , foldlU'
  , foldlWithKeyU'
  -- * Debugging
  , showTree
  ) where

import           Data.UnionMap.Internal
import           Prelude                ()