module Data.CompactMap
( CompactMap
, fromList
, toVector
, lookup
, getLE
, getIndex
) where
import qualified Data.CompactMap.Generic as CM
import qualified Data.Vector as V
import Data.Foldable as F
import Prelude hiding (lookup)
newtype CompactMap k v = CompactMap { getCM :: CM.CompactMap V.Vector k v }
instance Show v => Show (CompactMap k v) where
show = show . V.toList . getMap
instance Foldable (CompactMap k) where
fold = F.fold . getMap
foldr f i = V.foldr f i . getMap
foldr' f i = V.foldr' f i . getMap
foldr1 f = V.foldr1 f . getMap
foldl f i = V.foldl f i . getMap
foldl' f i = V.foldl' f i . getMap
foldl1 f = V.foldl1 f . getMap
foldMap f = F.foldMap f . getMap
#if MIN_VERSION_base(4,8,0)
toList = F.toList . getMap
elem e = F.elem e . getMap
null = F.null . getMap
minimum = F.minimum . getMap
maximum = F.maximum . getMap
length = F.length . getMap
sum = F.sum . getMap
product = F.product . getMap
#endif
getMap :: CompactMap k v -> V.Vector v
getMap = CM.toVector . getCM
fromList :: Ord k => [v] -> (v -> k) -> CompactMap k v
fromList lst f = CompactMap (CM.fromList lst f)
toVector :: CompactMap k v -> V.Vector v
toVector = getMap
lookup :: Ord k => k -> CompactMap k v -> Maybe v
lookup k (CompactMap cm) = CM.lookup k cm
getLE :: Ord k => k -> CompactMap k v -> Maybe (Int, v)
getLE k (CompactMap cm) = CM.getLE k cm
getIndex :: Int -> CompactMap k v -> Maybe v
getIndex i (CompactMap cm) = CM.getIndex i cm