-----------------------------------------------------------
-- |
-- Module      : Data.UnionIntMap
-- Copyright   : (C) 2015, Yu Fukuzawa
-- License     : BSD3
-- Maintainer  : minpou.primer@email.com
-- Stability   : experimental
-- Portability : portable
--
-- An implementation of heterogeneous tree-map by open unions.
-- This module uses the @Data.IntMap@ inside,
-- see also <https://hackage.haskell.org/package/containers>.
--
-----------------------------------------------------------

module Data.UnionIntMap (
  -- * Types
    UnionIntMap
  , Key
  -- * 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.UnionIntMap.Internal
import           Prelude                   ()