{-# LANGUAGE CPP #-} module Data.IntMap.CharMap2 where #ifdef __GLASGOW_HASKELL__ import GHC.Base(unsafeChr) #else import Data.Char (chr) #endif import Data.Char as C(ord) import Data.List as L (map) import qualified Data.IntMap as M #if MIN_VERSION_containers(0,6,0) import qualified Data.IntMap.Internal.Debug as MD #else import qualified Data.IntMap as MD #endif import qualified Data.IntSet as S(IntSet) import Data.Semigroup as Sem #ifndef __GLASGOW_HASKELL__ unsafeChr = chr #endif newtype CharMap a = CharMap {CharMap a -> IntMap a unCharMap :: M.IntMap a} deriving (CharMap a -> CharMap a -> Bool (CharMap a -> CharMap a -> Bool) -> (CharMap a -> CharMap a -> Bool) -> Eq (CharMap a) forall a. Eq a => CharMap a -> CharMap a -> Bool forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a /= :: CharMap a -> CharMap a -> Bool $c/= :: forall a. Eq a => CharMap a -> CharMap a -> Bool == :: CharMap a -> CharMap a -> Bool $c== :: forall a. Eq a => CharMap a -> CharMap a -> Bool Eq,Eq (CharMap a) Eq (CharMap a) => (CharMap a -> CharMap a -> Ordering) -> (CharMap a -> CharMap a -> Bool) -> (CharMap a -> CharMap a -> Bool) -> (CharMap a -> CharMap a -> Bool) -> (CharMap a -> CharMap a -> Bool) -> (CharMap a -> CharMap a -> CharMap a) -> (CharMap a -> CharMap a -> CharMap a) -> Ord (CharMap a) CharMap a -> CharMap a -> Bool CharMap a -> CharMap a -> Ordering CharMap a -> CharMap a -> CharMap a forall a. Eq a => (a -> a -> Ordering) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> Bool) -> (a -> a -> a) -> (a -> a -> a) -> Ord a forall a. Ord a => Eq (CharMap a) forall a. Ord a => CharMap a -> CharMap a -> Bool forall a. Ord a => CharMap a -> CharMap a -> Ordering forall a. Ord a => CharMap a -> CharMap a -> CharMap a min :: CharMap a -> CharMap a -> CharMap a $cmin :: forall a. Ord a => CharMap a -> CharMap a -> CharMap a max :: CharMap a -> CharMap a -> CharMap a $cmax :: forall a. Ord a => CharMap a -> CharMap a -> CharMap a >= :: CharMap a -> CharMap a -> Bool $c>= :: forall a. Ord a => CharMap a -> CharMap a -> Bool > :: CharMap a -> CharMap a -> Bool $c> :: forall a. Ord a => CharMap a -> CharMap a -> Bool <= :: CharMap a -> CharMap a -> Bool $c<= :: forall a. Ord a => CharMap a -> CharMap a -> Bool < :: CharMap a -> CharMap a -> Bool $c< :: forall a. Ord a => CharMap a -> CharMap a -> Bool compare :: CharMap a -> CharMap a -> Ordering $ccompare :: forall a. Ord a => CharMap a -> CharMap a -> Ordering $cp1Ord :: forall a. Ord a => Eq (CharMap a) Ord,ReadPrec [CharMap a] ReadPrec (CharMap a) Int -> ReadS (CharMap a) ReadS [CharMap a] (Int -> ReadS (CharMap a)) -> ReadS [CharMap a] -> ReadPrec (CharMap a) -> ReadPrec [CharMap a] -> Read (CharMap a) forall a. Read a => ReadPrec [CharMap a] forall a. Read a => ReadPrec (CharMap a) forall a. Read a => Int -> ReadS (CharMap a) forall a. Read a => ReadS [CharMap a] forall a. (Int -> ReadS a) -> ReadS [a] -> ReadPrec a -> ReadPrec [a] -> Read a readListPrec :: ReadPrec [CharMap a] $creadListPrec :: forall a. Read a => ReadPrec [CharMap a] readPrec :: ReadPrec (CharMap a) $creadPrec :: forall a. Read a => ReadPrec (CharMap a) readList :: ReadS [CharMap a] $creadList :: forall a. Read a => ReadS [CharMap a] readsPrec :: Int -> ReadS (CharMap a) $creadsPrec :: forall a. Read a => Int -> ReadS (CharMap a) Read,Int -> CharMap a -> ShowS [CharMap a] -> ShowS CharMap a -> String (Int -> CharMap a -> ShowS) -> (CharMap a -> String) -> ([CharMap a] -> ShowS) -> Show (CharMap a) forall a. Show a => Int -> CharMap a -> ShowS forall a. Show a => [CharMap a] -> ShowS forall a. Show a => CharMap a -> String forall a. (Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a showList :: [CharMap a] -> ShowS $cshowList :: forall a. Show a => [CharMap a] -> ShowS show :: CharMap a -> String $cshow :: forall a. Show a => CharMap a -> String showsPrec :: Int -> CharMap a -> ShowS $cshowsPrec :: forall a. Show a => Int -> CharMap a -> ShowS Show) instance Sem.Semigroup (CharMap a) where CharMap x :: IntMap a x <> :: CharMap a -> CharMap a -> CharMap a <> CharMap y :: IntMap a y = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (IntMap a x IntMap a -> IntMap a -> IntMap a forall a. Monoid a => a -> a -> a `mappend` IntMap a y) instance Monoid (CharMap a) where mempty :: CharMap a mempty = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a forall a. Monoid a => a mempty mappend :: CharMap a -> CharMap a -> CharMap a mappend = CharMap a -> CharMap a -> CharMap a forall a. Semigroup a => a -> a -> a (<>) instance Functor CharMap where fmap :: (a -> b) -> CharMap a -> CharMap b fmap f :: a -> b f (CharMap m :: IntMap a m) = IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap ((a -> b) -> IntMap a -> IntMap b forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b fmap a -> b f IntMap a m) type Key = Char (!) :: CharMap a -> Key -> a (!) (CharMap m :: IntMap a m) k :: Key k = IntMap a -> Int -> a forall a. IntMap a -> Int -> a (M.!) IntMap a m (Key -> Int C.ord Key k) (\\) :: CharMap a -> CharMap b -> CharMap a \\ :: CharMap a -> CharMap b -> CharMap a (\\) (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (IntMap a -> IntMap b -> IntMap a forall a b. IntMap a -> IntMap b -> IntMap a (M.\\) IntMap a m1 IntMap b m2) null :: CharMap a -> Bool null :: CharMap a -> Bool null (CharMap m :: IntMap a m) = IntMap a -> Bool forall a. IntMap a -> Bool M.null IntMap a m size :: CharMap a -> Int size :: CharMap a -> Int size (CharMap m :: IntMap a m) = IntMap a -> Int forall a. IntMap a -> Int M.size IntMap a m member :: Key -> CharMap a -> Bool member :: Key -> CharMap a -> Bool member k :: Key k (CharMap m :: IntMap a m) = Int -> IntMap a -> Bool forall a. Int -> IntMap a -> Bool M.member (Key -> Int C.ord Key k) IntMap a m notMember :: Key -> CharMap a -> Bool notMember :: Key -> CharMap a -> Bool notMember k :: Key k (CharMap m :: IntMap a m) = Int -> IntMap a -> Bool forall a. Int -> IntMap a -> Bool M.notMember (Key -> Int C.ord Key k) IntMap a m lookup :: Key -> CharMap a -> Maybe a lookup :: Key -> CharMap a -> Maybe a lookup k :: Key k (CharMap m :: IntMap a m) = Int -> IntMap a -> Maybe a forall a. Int -> IntMap a -> Maybe a M.lookup (Key -> Int C.ord Key k) IntMap a m findWithDefault :: a -> Key -> CharMap a -> a findWithDefault :: a -> Key -> CharMap a -> a findWithDefault a :: a a k :: Key k (CharMap m :: IntMap a m) = a -> Int -> IntMap a -> a forall a. a -> Int -> IntMap a -> a M.findWithDefault a a (Key -> Int C.ord Key k) IntMap a m empty :: CharMap a empty :: CharMap a empty = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a forall a. IntMap a M.empty singleton :: Key -> a -> CharMap a singleton :: Key -> a -> CharMap a singleton k :: Key k a :: a a = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (Int -> a -> IntMap a forall a. Int -> a -> IntMap a M.singleton (Key -> Int C.ord Key k) a a) insert :: Key -> a -> CharMap a -> CharMap a insert :: Key -> a -> CharMap a -> CharMap a insert k :: Key k a :: a a (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (Int -> a -> IntMap a -> IntMap a forall a. Int -> a -> IntMap a -> IntMap a M.insert (Key -> Int C.ord Key k) a a IntMap a m) insertWith :: (a -> a -> a) -> Key -> a -> CharMap a -> CharMap a insertWith :: (a -> a -> a) -> Key -> a -> CharMap a -> CharMap a insertWith f :: a -> a -> a f k :: Key k a :: a a (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a -> a) -> Int -> a -> IntMap a -> IntMap a forall a. (a -> a -> a) -> Int -> a -> IntMap a -> IntMap a M.insertWith a -> a -> a f (Key -> Int C.ord Key k) a a IntMap a m) insertWithKey :: (Key -> a -> a -> a) -> Key -> a -> CharMap a -> CharMap a insertWithKey :: (Key -> a -> a -> a) -> Key -> a -> CharMap a -> CharMap a insertWithKey f :: Key -> a -> a -> a f k :: Key k a :: a a (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> a -> a) -> Int -> a -> IntMap a -> IntMap a forall a. (Int -> a -> a -> a) -> Int -> a -> IntMap a -> IntMap a M.insertWithKey Int -> a -> a -> a f' (Key -> Int C.ord Key k) a a IntMap a m) where f' :: Int -> a -> a -> a f' b :: Int b a1 :: a a1 a2 :: a a2 = Key -> a -> a -> a f (Int -> Key unsafeChr Int b) a a1 a a2 insertLookupWithKey :: (Key -> a -> a -> a) -> Key -> a -> CharMap a -> (Maybe a, CharMap a) insertLookupWithKey :: (Key -> a -> a -> a) -> Key -> a -> CharMap a -> (Maybe a, CharMap a) insertLookupWithKey f :: Key -> a -> a -> a f k :: Key k a :: a a (CharMap m :: IntMap a m) = (Maybe a ma,IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m') where (ma :: Maybe a ma,m' :: IntMap a m') = (Int -> a -> a -> a) -> Int -> a -> IntMap a -> (Maybe a, IntMap a) forall a. (Int -> a -> a -> a) -> Int -> a -> IntMap a -> (Maybe a, IntMap a) M.insertLookupWithKey Int -> a -> a -> a f' (Key -> Int C.ord Key k) a a IntMap a m f' :: Int -> a -> a -> a f' b :: Int b a1 :: a a1 a2 :: a a2 = Key -> a -> a -> a f (Int -> Key unsafeChr Int b) a a1 a a2 delete :: Key -> CharMap a -> CharMap a delete :: Key -> CharMap a -> CharMap a delete k :: Key k (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (Int -> IntMap a -> IntMap a forall a. Int -> IntMap a -> IntMap a M.delete (Key -> Int C.ord Key k) IntMap a m) adjust :: (a -> a) -> Key -> CharMap a -> CharMap a adjust :: (a -> a) -> Key -> CharMap a -> CharMap a adjust f :: a -> a f k :: Key k (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a) -> Int -> IntMap a -> IntMap a forall a. (a -> a) -> Int -> IntMap a -> IntMap a M.adjust a -> a f (Key -> Int C.ord Key k) IntMap a m) adjustWithKey :: (Key -> a -> a) -> Key -> CharMap a -> CharMap a adjustWithKey :: (Key -> a -> a) -> Key -> CharMap a -> CharMap a adjustWithKey f :: Key -> a -> a f k :: Key k (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> a) -> Int -> IntMap a -> IntMap a forall a. (Int -> a -> a) -> Int -> IntMap a -> IntMap a M.adjustWithKey Int -> a -> a f' (Key -> Int C.ord Key k) IntMap a m) where f' :: Int -> a -> a f' b :: Int b a :: a a = Key -> a -> a f (Int -> Key unsafeChr Int b) a a update :: (a -> Maybe a) -> Key -> CharMap a -> CharMap a update :: (a -> Maybe a) -> Key -> CharMap a -> CharMap a update f :: a -> Maybe a f k :: Key k (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> Maybe a) -> Int -> IntMap a -> IntMap a forall a. (a -> Maybe a) -> Int -> IntMap a -> IntMap a M.update a -> Maybe a f (Key -> Int C.ord Key k) IntMap a m) updateWithKey :: (Key -> a -> Maybe a) -> Key -> CharMap a -> CharMap a updateWithKey :: (Key -> a -> Maybe a) -> Key -> CharMap a -> CharMap a updateWithKey f :: Key -> a -> Maybe a f k :: Key k (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> Maybe a) -> Int -> IntMap a -> IntMap a forall a. (Int -> a -> Maybe a) -> Int -> IntMap a -> IntMap a M.updateWithKey Int -> a -> Maybe a f' (Key -> Int C.ord Key k) IntMap a m) where f' :: Int -> a -> Maybe a f' b :: Int b a :: a a = Key -> a -> Maybe a f (Int -> Key unsafeChr Int b) a a updateLookupWithKey :: (Key -> a -> Maybe a) -> Key -> CharMap a -> (Maybe a, CharMap a) updateLookupWithKey :: (Key -> a -> Maybe a) -> Key -> CharMap a -> (Maybe a, CharMap a) updateLookupWithKey f :: Key -> a -> Maybe a f k :: Key k (CharMap m :: IntMap a m) = (Maybe a a,IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m') where (a :: Maybe a a,m' :: IntMap a m') = (Int -> a -> Maybe a) -> Int -> IntMap a -> (Maybe a, IntMap a) forall a. (Int -> a -> Maybe a) -> Int -> IntMap a -> (Maybe a, IntMap a) M.updateLookupWithKey Int -> a -> Maybe a f' (Key -> Int C.ord Key k) IntMap a m f' :: Int -> a -> Maybe a f' b :: Int b a1 :: a a1 = Key -> a -> Maybe a f (Int -> Key unsafeChr Int b) a a1 union :: CharMap a -> CharMap a -> CharMap a union :: CharMap a -> CharMap a -> CharMap a union (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap a m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (IntMap a -> IntMap a -> IntMap a forall a. IntMap a -> IntMap a -> IntMap a M.union IntMap a m1 IntMap a m2) unionWith :: (a -> a -> a) -> CharMap a -> CharMap a -> CharMap a unionWith :: (a -> a -> a) -> CharMap a -> CharMap a -> CharMap a unionWith f :: a -> a -> a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap a m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a -> a) -> IntMap a -> IntMap a -> IntMap a forall a. (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a M.unionWith a -> a -> a f IntMap a m1 IntMap a m2) unionWithKey :: (Key -> a -> a -> a) -> CharMap a -> CharMap a -> CharMap a unionWithKey :: (Key -> a -> a -> a) -> CharMap a -> CharMap a -> CharMap a unionWithKey f :: Key -> a -> a -> a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap a m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> a -> a) -> IntMap a -> IntMap a -> IntMap a forall a. (Int -> a -> a -> a) -> IntMap a -> IntMap a -> IntMap a M.unionWithKey Int -> a -> a -> a f' IntMap a m1 IntMap a m2) where f' :: Int -> a -> a -> a f' b :: Int b a1 :: a a1 a2 :: a a2 = Key -> a -> a -> a f (Int -> Key unsafeChr Int b) a a1 a a2 unions :: [CharMap a] -> CharMap a unions :: [CharMap a] -> CharMap a unions cs :: [CharMap a] cs = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ([IntMap a] -> IntMap a forall (f :: * -> *) a. Foldable f => f (IntMap a) -> IntMap a M.unions ((CharMap a -> IntMap a) -> [CharMap a] -> [IntMap a] forall a b. (a -> b) -> [a] -> [b] L.map CharMap a -> IntMap a forall a. CharMap a -> IntMap a unCharMap [CharMap a] cs)) unionsWith :: (a -> a -> a) -> [CharMap a] -> CharMap a unionsWith :: (a -> a -> a) -> [CharMap a] -> CharMap a unionsWith f :: a -> a -> a f cs :: [CharMap a] cs = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a -> a) -> [IntMap a] -> IntMap a forall (f :: * -> *) a. Foldable f => (a -> a -> a) -> f (IntMap a) -> IntMap a M.unionsWith a -> a -> a f ((CharMap a -> IntMap a) -> [CharMap a] -> [IntMap a] forall a b. (a -> b) -> [a] -> [b] L.map CharMap a -> IntMap a forall a. CharMap a -> IntMap a unCharMap [CharMap a] cs)) difference :: CharMap a -> CharMap b -> CharMap a difference :: CharMap a -> CharMap b -> CharMap a difference (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (IntMap a -> IntMap b -> IntMap a forall a b. IntMap a -> IntMap b -> IntMap a M.difference IntMap a m1 IntMap b m2) differenceWith :: (a -> b -> Maybe a) -> CharMap a -> CharMap b -> CharMap a differenceWith :: (a -> b -> Maybe a) -> CharMap a -> CharMap b -> CharMap a differenceWith f :: a -> b -> Maybe a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a forall a b. (a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a M.differenceWith a -> b -> Maybe a f IntMap a m1 IntMap b m2) differenceWithKey :: (Key -> a -> b -> Maybe a) -> CharMap a -> CharMap b -> CharMap a differenceWithKey :: (Key -> a -> b -> Maybe a) -> CharMap a -> CharMap b -> CharMap a differenceWithKey f :: Key -> a -> b -> Maybe a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a forall a b. (Int -> a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a M.differenceWithKey Int -> a -> b -> Maybe a f' IntMap a m1 IntMap b m2) where f' :: Int -> a -> b -> Maybe a f' b :: Int b a1 :: a a1 a2 :: b a2 = Key -> a -> b -> Maybe a f (Int -> Key unsafeChr Int b) a a1 b a2 intersection :: CharMap a -> CharMap b -> CharMap a intersection :: CharMap a -> CharMap b -> CharMap a intersection (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap (IntMap a -> IntMap b -> IntMap a forall a b. IntMap a -> IntMap b -> IntMap a M.intersection IntMap a m1 IntMap b m2) intersectionWith :: (a -> b -> a) -> CharMap a -> CharMap b -> CharMap a intersectionWith :: (a -> b -> a) -> CharMap a -> CharMap b -> CharMap a intersectionWith f :: a -> b -> a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> b -> a) -> IntMap a -> IntMap b -> IntMap a forall a b c. (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c M.intersectionWith a -> b -> a f IntMap a m1 IntMap b m2) intersectionWithKey :: (Key -> a -> b -> a) -> CharMap a -> CharMap b -> CharMap a intersectionWithKey :: (Key -> a -> b -> a) -> CharMap a -> CharMap b -> CharMap a intersectionWithKey f :: Key -> a -> b -> a f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> b -> a) -> IntMap a -> IntMap b -> IntMap a forall a b c. (Int -> a -> b -> c) -> IntMap a -> IntMap b -> IntMap c M.intersectionWithKey Int -> a -> b -> a f' IntMap a m1 IntMap b m2) where f' :: Int -> a -> b -> a f' b :: Int b a1 :: a a1 a2 :: b a2 = Key -> a -> b -> a f (Int -> Key unsafeChr Int b) a a1 b a2 map :: (a -> b) -> CharMap a -> CharMap b map :: (a -> b) -> CharMap a -> CharMap b map f :: a -> b f (CharMap m :: IntMap a m) = IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap ((a -> b) -> IntMap a -> IntMap b forall a b. (a -> b) -> IntMap a -> IntMap b M.map a -> b f IntMap a m) mapWithKey :: (Key -> a -> b) -> CharMap a -> CharMap b mapWithKey :: (Key -> a -> b) -> CharMap a -> CharMap b mapWithKey f :: Key -> a -> b f (CharMap m :: IntMap a m) = IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap ((Int -> a -> b) -> IntMap a -> IntMap b forall a b. (Int -> a -> b) -> IntMap a -> IntMap b M.mapWithKey Int -> a -> b f' IntMap a m) where f' :: Int -> a -> b f' b :: Int b a :: a a = Key -> a -> b f (Int -> Key unsafeChr Int b) a a mapAccum :: (a -> b -> (a, c)) -> a -> CharMap b -> (a, CharMap c) mapAccum :: (a -> b -> (a, c)) -> a -> CharMap b -> (a, CharMap c) mapAccum f :: a -> b -> (a, c) f a :: a a (CharMap m :: IntMap b m) = (a a',IntMap c -> CharMap c forall a. IntMap a -> CharMap a CharMap IntMap c m') where (a' :: a a',m' :: IntMap c m') = (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) forall a b c. (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) M.mapAccum a -> b -> (a, c) f a a IntMap b m mapAccumWithKey :: (a -> Key -> b -> (a, c)) -> a -> CharMap b -> (a, CharMap c) mapAccumWithKey :: (a -> Key -> b -> (a, c)) -> a -> CharMap b -> (a, CharMap c) mapAccumWithKey f :: a -> Key -> b -> (a, c) f a :: a a (CharMap m :: IntMap b m) = (a a',IntMap c -> CharMap c forall a. IntMap a -> CharMap a CharMap IntMap c m') where (a' :: a a',m' :: IntMap c m') = (a -> Int -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) forall a b c. (a -> Int -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c) M.mapAccumWithKey a -> Int -> b -> (a, c) f' a a IntMap b m f' :: a -> Int -> b -> (a, c) f' a1 :: a a1 b :: Int b a2 :: b a2 = a -> Key -> b -> (a, c) f a a1 (Int -> Key unsafeChr Int b) b a2 fold :: (a -> b -> b) -> b -> CharMap a -> b fold :: (a -> b -> b) -> b -> CharMap a -> b fold f :: a -> b -> b f a :: b a (CharMap m :: IntMap a m) = (a -> b -> b) -> b -> IntMap a -> b forall a b. (a -> b -> b) -> b -> IntMap a -> b M.foldr a -> b -> b f b a IntMap a m foldWithKey :: (Key -> a -> b -> b) -> b -> CharMap a -> b foldWithKey :: (Key -> a -> b -> b) -> b -> CharMap a -> b foldWithKey f :: Key -> a -> b -> b f a :: b a (CharMap m :: IntMap a m) = (Int -> a -> b -> b) -> b -> IntMap a -> b forall a b. (Int -> a -> b -> b) -> b -> IntMap a -> b M.foldrWithKey Int -> a -> b -> b f' b a IntMap a m where f' :: Int -> a -> b -> b f' b :: Int b a1 :: a a1 a2 :: b a2 = Key -> a -> b -> b f (Int -> Key unsafeChr Int b) a a1 b a2 elems :: CharMap a -> [a] elems :: CharMap a -> [a] elems (CharMap m :: IntMap a m) = IntMap a -> [a] forall a. IntMap a -> [a] M.elems IntMap a m keys :: CharMap a -> [Key] keys :: CharMap a -> String keys (CharMap m :: IntMap a m) = (Int -> Key) -> [Int] -> String forall a b. (a -> b) -> [a] -> [b] L.map Int -> Key unsafeChr (IntMap a -> [Int] forall a. IntMap a -> [Int] M.keys IntMap a m) keysSet :: CharMap a -> S.IntSet keysSet :: CharMap a -> IntSet keysSet (CharMap m :: IntMap a m) = IntMap a -> IntSet forall a. IntMap a -> IntSet M.keysSet IntMap a m assocs :: CharMap a -> [(Key, a)] assocs :: CharMap a -> [(Key, a)] assocs (CharMap m :: IntMap a m) = ((Int, a) -> (Key, a)) -> [(Int, a)] -> [(Key, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(b :: Int b,a :: a a) -> (Int -> Key unsafeChr Int b,a a)) (IntMap a -> [(Int, a)] forall a. IntMap a -> [(Int, a)] M.assocs IntMap a m) toList :: CharMap a -> [(Key, a)] toList :: CharMap a -> [(Key, a)] toList (CharMap m :: IntMap a m) = ((Int, a) -> (Key, a)) -> [(Int, a)] -> [(Key, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(b :: Int b,a :: a a) -> (Int -> Key unsafeChr Int b,a a)) (IntMap a -> [(Int, a)] forall a. IntMap a -> [(Int, a)] M.toList IntMap a m) fromList :: [(Key, a)] -> CharMap a fromList :: [(Key, a)] -> CharMap a fromList ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ([(Int, a)] -> IntMap a forall a. [(Int, a)] -> IntMap a M.fromList (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) fromListWith :: (a -> a -> a) -> [(Key, a)] -> CharMap a fromListWith :: (a -> a -> a) -> [(Key, a)] -> CharMap a fromListWith f :: a -> a -> a f ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a -> a) -> [(Int, a)] -> IntMap a forall a. (a -> a -> a) -> [(Int, a)] -> IntMap a M.fromListWith a -> a -> a f (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) fromListWithKey :: (Key -> a -> a -> a) -> [(Key, a)] -> CharMap a fromListWithKey :: (Key -> a -> a -> a) -> [(Key, a)] -> CharMap a fromListWithKey f :: Key -> a -> a -> a f ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> a -> a) -> [(Int, a)] -> IntMap a forall a. (Int -> a -> a -> a) -> [(Int, a)] -> IntMap a M.fromListWithKey Int -> a -> a -> a f' (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) where f' :: Int -> a -> a -> a f' b :: Int b a1 :: a a1 a2 :: a a2 = Key -> a -> a -> a f (Int -> Key unsafeChr Int b) a a1 a a2 toAscList :: CharMap a -> [(Key, a)] toAscList :: CharMap a -> [(Key, a)] toAscList (CharMap m :: IntMap a m) = ((Int, a) -> (Key, a)) -> [(Int, a)] -> [(Key, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(b :: Int b,a :: a a) -> (Int -> Key unsafeChr Int b,a a)) (IntMap a -> [(Int, a)] forall a. IntMap a -> [(Int, a)] M.toAscList IntMap a m) fromAscList :: [(Key, a)] -> CharMap a fromAscList :: [(Key, a)] -> CharMap a fromAscList ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ([(Int, a)] -> IntMap a forall a. [(Int, a)] -> IntMap a M.fromAscList (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) fromAscListWith :: (a -> a -> a) -> [(Key, a)] -> CharMap a fromAscListWith :: (a -> a -> a) -> [(Key, a)] -> CharMap a fromAscListWith f :: a -> a -> a f ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> a -> a) -> [(Int, a)] -> IntMap a forall a. (a -> a -> a) -> [(Int, a)] -> IntMap a M.fromAscListWith a -> a -> a f (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) fromAscListWithKey :: (Key -> a -> a -> a) -> [(Key, a)] -> CharMap a fromAscListWithKey :: (Key -> a -> a -> a) -> [(Key, a)] -> CharMap a fromAscListWithKey f :: Key -> a -> a -> a f ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> a -> a) -> [(Int, a)] -> IntMap a forall a. (Int -> a -> a -> a) -> [(Int, a)] -> IntMap a M.fromAscListWithKey Int -> a -> a -> a f' (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) where f' :: Int -> a -> a -> a f' b :: Int b a1 :: a a1 a2 :: a a2 = Key -> a -> a -> a f (Int -> Key unsafeChr Int b) a a1 a a2 fromDistinctAscList :: [(Key, a)] -> CharMap a fromDistinctAscList :: [(Key, a)] -> CharMap a fromDistinctAscList ka :: [(Key, a)] ka = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ([(Int, a)] -> IntMap a forall a. [(Int, a)] -> IntMap a M.fromDistinctAscList (((Key, a) -> (Int, a)) -> [(Key, a)] -> [(Int, a)] forall a b. (a -> b) -> [a] -> [b] L.map (\(k :: Key k,a :: a a) -> (Key -> Int C.ord Key k,a a)) [(Key, a)] ka)) filter :: (a -> Bool) -> CharMap a -> CharMap a filter :: (a -> Bool) -> CharMap a -> CharMap a filter f :: a -> Bool f (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((a -> Bool) -> IntMap a -> IntMap a forall a. (a -> Bool) -> IntMap a -> IntMap a M.filter a -> Bool f IntMap a m) filterWithKey :: (Key -> a -> Bool) -> CharMap a -> CharMap a filterWithKey :: (Key -> a -> Bool) -> CharMap a -> CharMap a filterWithKey f :: Key -> a -> Bool f (CharMap m :: IntMap a m) = IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap ((Int -> a -> Bool) -> IntMap a -> IntMap a forall a. (Int -> a -> Bool) -> IntMap a -> IntMap a M.filterWithKey Int -> a -> Bool f' IntMap a m) where f' :: Int -> a -> Bool f' b :: Int b a :: a a = Key -> a -> Bool f (Int -> Key unsafeChr Int b) a a partition :: (a -> Bool) -> CharMap a -> (CharMap a, CharMap a) partition :: (a -> Bool) -> CharMap a -> (CharMap a, CharMap a) partition f :: a -> Bool f (CharMap m :: IntMap a m) = (IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m1', IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m2') where (m1' :: IntMap a m1',m2' :: IntMap a m2') = (a -> Bool) -> IntMap a -> (IntMap a, IntMap a) forall a. (a -> Bool) -> IntMap a -> (IntMap a, IntMap a) M.partition a -> Bool f IntMap a m partitionWithKey :: (Key -> a -> Bool) -> CharMap a -> (CharMap a, CharMap a) partitionWithKey :: (Key -> a -> Bool) -> CharMap a -> (CharMap a, CharMap a) partitionWithKey f :: Key -> a -> Bool f (CharMap m :: IntMap a m) = (IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m1', IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m2') where (m1' :: IntMap a m1',m2' :: IntMap a m2') = (Int -> a -> Bool) -> IntMap a -> (IntMap a, IntMap a) forall a. (Int -> a -> Bool) -> IntMap a -> (IntMap a, IntMap a) M.partitionWithKey Int -> a -> Bool f' IntMap a m f' :: Int -> a -> Bool f' b :: Int b a :: a a = Key -> a -> Bool f (Int -> Key unsafeChr Int b) a a mapMaybe :: (a -> Maybe b) -> CharMap a -> CharMap b mapMaybe :: (a -> Maybe b) -> CharMap a -> CharMap b mapMaybe f :: a -> Maybe b f (CharMap m :: IntMap a m) = IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap ((a -> Maybe b) -> IntMap a -> IntMap b forall a b. (a -> Maybe b) -> IntMap a -> IntMap b M.mapMaybe a -> Maybe b f IntMap a m) mapMaybeWithKey :: (Key -> a -> Maybe b) -> CharMap a -> CharMap b mapMaybeWithKey :: (Key -> a -> Maybe b) -> CharMap a -> CharMap b mapMaybeWithKey f :: Key -> a -> Maybe b f (CharMap m :: IntMap a m) = IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap ((Int -> a -> Maybe b) -> IntMap a -> IntMap b forall a b. (Int -> a -> Maybe b) -> IntMap a -> IntMap b M.mapMaybeWithKey Int -> a -> Maybe b f' IntMap a m) where f' :: Int -> a -> Maybe b f' b :: Int b a :: a a = Key -> a -> Maybe b f (Int -> Key unsafeChr Int b) a a mapEither :: (a -> Either b c) -> CharMap a -> (CharMap b, CharMap c) mapEither :: (a -> Either b c) -> CharMap a -> (CharMap b, CharMap c) mapEither f :: a -> Either b c f (CharMap m :: IntMap a m) = (IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap IntMap b m1', IntMap c -> CharMap c forall a. IntMap a -> CharMap a CharMap IntMap c m2') where (m1' :: IntMap b m1',m2' :: IntMap c m2') = (a -> Either b c) -> IntMap a -> (IntMap b, IntMap c) forall a b c. (a -> Either b c) -> IntMap a -> (IntMap b, IntMap c) M.mapEither a -> Either b c f IntMap a m mapEitherWithKey :: (Key -> a -> Either b c) -> CharMap a -> (CharMap b, CharMap c) mapEitherWithKey :: (Key -> a -> Either b c) -> CharMap a -> (CharMap b, CharMap c) mapEitherWithKey f :: Key -> a -> Either b c f (CharMap m :: IntMap a m) = (IntMap b -> CharMap b forall a. IntMap a -> CharMap a CharMap IntMap b m1', IntMap c -> CharMap c forall a. IntMap a -> CharMap a CharMap IntMap c m2') where (m1' :: IntMap b m1',m2' :: IntMap c m2') = (Int -> a -> Either b c) -> IntMap a -> (IntMap b, IntMap c) forall a b c. (Int -> a -> Either b c) -> IntMap a -> (IntMap b, IntMap c) M.mapEitherWithKey Int -> a -> Either b c f' IntMap a m f' :: Int -> a -> Either b c f' b :: Int b a :: a a = Key -> a -> Either b c f (Int -> Key unsafeChr Int b) a a split :: Key -> CharMap a -> (CharMap a, CharMap a) split :: Key -> CharMap a -> (CharMap a, CharMap a) split k :: Key k (CharMap m :: IntMap a m) = (IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m1', IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m2') where (m1' :: IntMap a m1',m2' :: IntMap a m2') = Int -> IntMap a -> (IntMap a, IntMap a) forall a. Int -> IntMap a -> (IntMap a, IntMap a) M.split (Key -> Int C.ord Key k) IntMap a m splitLookup :: Key -> CharMap a -> (CharMap a, Maybe a, CharMap a) splitLookup :: Key -> CharMap a -> (CharMap a, Maybe a, CharMap a) splitLookup k :: Key k (CharMap m :: IntMap a m) = (IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m1', Maybe a a, IntMap a -> CharMap a forall a. IntMap a -> CharMap a CharMap IntMap a m2') where (m1' :: IntMap a m1',a :: Maybe a a,m2' :: IntMap a m2') = Int -> IntMap a -> (IntMap a, Maybe a, IntMap a) forall a. Int -> IntMap a -> (IntMap a, Maybe a, IntMap a) M.splitLookup (Key -> Int C.ord Key k) IntMap a m isSubmapOf :: Eq a => CharMap a -> CharMap a -> Bool isSubmapOf :: CharMap a -> CharMap a -> Bool isSubmapOf (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap a m2) = IntMap a -> IntMap a -> Bool forall a. Eq a => IntMap a -> IntMap a -> Bool M.isSubmapOf IntMap a m1 IntMap a m2 isSubmapOfBy :: (a -> b -> Bool) -> CharMap a -> CharMap b -> Bool isSubmapOfBy :: (a -> b -> Bool) -> CharMap a -> CharMap b -> Bool isSubmapOfBy f :: a -> b -> Bool f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool forall a b. (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool M.isSubmapOfBy a -> b -> Bool f IntMap a m1 IntMap b m2 isProperSubmapOf :: Eq a => CharMap a -> CharMap a -> Bool isProperSubmapOf :: CharMap a -> CharMap a -> Bool isProperSubmapOf (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap a m2) = IntMap a -> IntMap a -> Bool forall a. Eq a => IntMap a -> IntMap a -> Bool M.isProperSubmapOf IntMap a m1 IntMap a m2 isProperSubmapOfBy :: (a -> b -> Bool) -> CharMap a -> CharMap b -> Bool isProperSubmapOfBy :: (a -> b -> Bool) -> CharMap a -> CharMap b -> Bool isProperSubmapOfBy f :: a -> b -> Bool f (CharMap m1 :: IntMap a m1) (CharMap m2 :: IntMap b m2) = (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool forall a b. (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool M.isProperSubmapOfBy a -> b -> Bool f IntMap a m1 IntMap b m2 showTree :: Show a => CharMap a -> String showTree :: CharMap a -> String showTree (CharMap m :: IntMap a m) = IntMap a -> String forall a. Show a => IntMap a -> String MD.showTree IntMap a m showTreeWith :: Show a => Bool -> Bool -> CharMap a -> String showTreeWith :: Bool -> Bool -> CharMap a -> String showTreeWith b1 :: Bool b1 b2 :: Bool b2 (CharMap m :: IntMap a m) = Bool -> Bool -> IntMap a -> String forall a. Show a => Bool -> Bool -> IntMap a -> String MD.showTreeWith Bool b1 Bool b2 IntMap a m {-# INLINE (!) #-} {-# INLINE (\\) #-} {-# INLINE null #-} {-# INLINE size #-} {-# INLINE member #-} {-# INLINE notMember #-} {-# INLINE lookup #-} {-# INLINE findWithDefault #-} {-# INLINE empty #-} {-# INLINE singleton #-} {-# INLINE insert #-} {-# INLINE insertWith #-} {-# INLINE insertWithKey #-} {-# INLINE insertLookupWithKey #-} {-# INLINE delete #-} {-# INLINE adjust #-} {-# INLINE adjustWithKey #-} {-# INLINE update #-} {-# INLINE updateWithKey #-} {-# INLINE updateLookupWithKey #-} {-# INLINE union #-} {-# INLINE unionWith #-} {-# INLINE unionWithKey #-} {-# INLINE unions #-} {-# INLINE unionsWith #-} {-# INLINE difference #-} {-# INLINE differenceWith #-} {-# INLINE differenceWithKey #-} {-# INLINE intersection #-} {-# INLINE intersectionWith #-} {-# INLINE intersectionWithKey #-} {-# INLINE map #-} {-# INLINE mapWithKey #-} {-# INLINE mapAccum #-} {-# INLINE mapAccumWithKey #-} {-# INLINE fold #-} {-# INLINE foldWithKey #-} {-# INLINE elems #-} {-# INLINE keys #-} {-# INLINE keysSet #-} {-# INLINE assocs #-} {-# INLINE toList #-} {-# INLINE fromList #-} {-# INLINE fromListWith #-} {-# INLINE fromListWithKey #-} {-# INLINE toAscList #-} {-# INLINE fromAscList #-} {-# INLINE fromAscListWith #-} {-# INLINE fromAscListWithKey #-} {-# INLINE fromDistinctAscList #-} {-# INLINE filter #-} {-# INLINE filterWithKey #-} {-# INLINE partition #-} {-# INLINE partitionWithKey #-} {-# INLINE mapMaybe #-} {-# INLINE mapMaybeWithKey #-} {-# INLINE mapEither #-} {-# INLINE mapEitherWithKey #-} {-# INLINE split #-} {-# INLINE splitLookup #-} {-# INLINE isSubmapOf #-} {-# INLINE isSubmapOfBy #-} {-# INLINE isProperSubmapOf #-} {-# INLINE isProperSubmapOfBy #-} {-# INLINE showTree #-} {-# INLINE showTreeWith #-}