module Data.Dependent.EnumMap.Strict (
  DEnumMap,
  Enum1(..),

  -- * Construction

  empty,
  singleton,
  -- fromSet

  -- ** From Unordered Lists

  fromList,
  fromListWith,
  fromListWithKey,

  -- ** From Ascending Lists

  fromAscList,
  fromAscListWith,
  fromAscListWithKey,
  fromDistinctAscList,

  -- * Insertion

  insert,
  insertWith,
  insertWithKey,
  insertLookupWithKey,

  -- * Deletion\/Update

  delete,
  adjust,
  adjustWithKey,
  update,
  updateWithKey,
  updateLookupWithKey,
  alter,
  alterF,

  -- * Query
  -- ** Lookup

  lookup,
  (!?),
  (!),
  findWithDefault,
  member,
  notMember,
  lookupLT,
  lookupGT,
  lookupLE,
  lookupGE,

  -- ** Size

  null,
  size,

  -- * Combine
  -- ** Union

  union,
  unionWith,
  unionWithKey,
  unions,
  unionsWith,

  -- ** Difference

  difference,
  (\\),
  differenceWith,
  differenceWithKey,
  differenceWithKey',

  -- ** Intersection

  intersection,
  intersectionWith,
  intersectionWithKey,

  -- ** Disjoint

  disjoint,

  -- ** Compose

  compose,

  -- ** Universal combining function

  mergeWithKey,

  -- * Traversal
  -- ** Map

  map,
  mapWithKey,
  traverseWithKey,
  traverseMaybeWithKey,
  mapAccum,
  mapAccumWithKey,
  mapAccumRWithKey,
  -- mapKeys,
  -- mapKeysWith,
  -- mapKeysMonotonic,

  -- * Folds

  foldr,
  foldl,
  foldrWithKey,
  foldlWithKey,
  foldMapWithKey,

  -- ** Strict folds

  foldr',
  foldl',
  foldrWithKey',
  foldlWithKey',

  -- * Conversion

  elems,
  keys,

  assocs,
  -- keysSet

  -- ** Lists

  toList,

  -- ** Ordered lists

  toAscList,
  toDescList,

  -- * Filter

  filter,
  filterWithKey,
  -- restrictKeys
  -- withoutKeys
  partition,
  partitionWithKey,

  takeWhileAntitone,
  dropWhileAntitone,
  spanAntitone,

  mapMaybe,
  mapMaybeWithKey,
  mapEither,
  mapEitherWithKey,

  split,
  splitLookup,
  splitRoot,

  -- * Submap

  isSubmapOf,
  isSubmapOfBy,
  isProperSubmapOf,
  isProperSubmapOfBy,

  -- * Min\/Max

  lookupMin,
  lookupMax,
  findMin,
  findMax,
  deleteMin,
  deleteMax,
  deleteFindMin,
  deleteFindMax,
  updateMin,
  updateMax,
  updateMinWithKey,
  updateMaxWithKey,
  minView,
  maxView,
  minViewWithKey,
  maxViewWithKey,
) where

import Prelude ()

import Data.Dependent.EnumMap.Strict.Internal