module Data.HashMap ( Map
, HashMap
, (!), (\\)
, null
, size
, member
, notMember
, lookup
, findWithDefault
, empty
, singleton
, insert
, insertWith, insertWithKey, insertLookupWithKey
, delete
, adjust
, adjustWithKey
, update
, updateWithKey
, updateLookupWithKey
, alter
, union
, unionWith
, unionWithKey
, unions
, unionsWith
, difference
, differenceWith
, differenceWithKey
, intersection
, intersectionWith
, intersectionWithKey
, map
, mapWithKey
, mapAccum
, mapAccumWithKey
, fold
, foldWithKey
, elems
, keys
, keysSet
, assocs
, toList
, fromList
, fromListWith
, fromListWithKey
, filter
, filterWithKey
, partition
, partitionWithKey
, mapMaybe
, mapMaybeWithKey
, mapEither
, mapEitherWithKey
, isSubmapOf, isSubmapOfBy
, isProperSubmapOf, isProperSubmapOfBy
) where
import Prelude hiding (lookup,map,filter,null)
import Control.Applicative (Applicative(pure,(<*>)))
import Control.DeepSeq
import Data.Hashable
import Data.Foldable (Foldable(foldMap))
import Data.List (foldl')
import Data.Monoid (Monoid(..))
#if MIN_VERSION_base(4,9,0)
import Data.Semigroup (Semigroup((<>), stimes), stimesIdempotentMonoid)
#endif
import Data.Traversable (Traversable(traverse))
import Data.Typeable
#if __GLASGOW_HASKELL__
import Text.Read
import Data.Data (Data(..), mkNoRepType)
#endif
import qualified Data.IntMap as I
import qualified Data.Map as M
import qualified Data.Set as S
(!) :: (Hashable k, Ord k) => Map k a -> k -> a
m :: Map k a
m ! :: Map k a -> k -> a
! k :: k
k = case k -> Map k a -> Maybe a
forall k a. (Hashable k, Ord k) => k -> Map k a -> Maybe a
lookup k
k Map k a
m of
Nothing -> [Char] -> a
forall a. HasCallStack => [Char] -> a
error "HashMap.(!): key not an element of the map"
Just v :: a
v -> a
v
(\\) :: Ord k => Map k a -> Map k b -> Map k a
m1 :: Map k a
m1 \\ :: Map k a -> Map k b -> Map k a
\\ m2 :: Map k b
m2 = Map k a -> Map k b -> Map k a
forall k a b. Ord k => Map k a -> Map k b -> Map k a
difference Map k a
m1 Map k b
m2
data Some k v = Only !k v | More !(M.Map k v) deriving (Some k v -> Some k v -> Bool
(Some k v -> Some k v -> Bool)
-> (Some k v -> Some k v -> Bool) -> Eq (Some k v)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k v. (Eq k, Eq v) => Some k v -> Some k v -> Bool
/= :: Some k v -> Some k v -> Bool
$c/= :: forall k v. (Eq k, Eq v) => Some k v -> Some k v -> Bool
== :: Some k v -> Some k v -> Bool
$c== :: forall k v. (Eq k, Eq v) => Some k v -> Some k v -> Bool
Eq, Eq (Some k v)
Eq (Some k v) =>
(Some k v -> Some k v -> Ordering)
-> (Some k v -> Some k v -> Bool)
-> (Some k v -> Some k v -> Bool)
-> (Some k v -> Some k v -> Bool)
-> (Some k v -> Some k v -> Bool)
-> (Some k v -> Some k v -> Some k v)
-> (Some k v -> Some k v -> Some k v)
-> Ord (Some k v)
Some k v -> Some k v -> Bool
Some k v -> Some k v -> Ordering
Some k v -> Some k v -> Some k v
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 k v. (Ord k, Ord v) => Eq (Some k v)
forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Bool
forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Ordering
forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Some k v
min :: Some k v -> Some k v -> Some k v
$cmin :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Some k v
max :: Some k v -> Some k v -> Some k v
$cmax :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Some k v
>= :: Some k v -> Some k v -> Bool
$c>= :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Bool
> :: Some k v -> Some k v -> Bool
$c> :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Bool
<= :: Some k v -> Some k v -> Bool
$c<= :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Bool
< :: Some k v -> Some k v -> Bool
$c< :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Bool
compare :: Some k v -> Some k v -> Ordering
$ccompare :: forall k v. (Ord k, Ord v) => Some k v -> Some k v -> Ordering
$cp1Ord :: forall k v. (Ord k, Ord v) => Eq (Some k v)
Ord)
instance (NFData k, NFData v) => NFData (Some k v) where
rnf :: Some k v -> ()
rnf (Only k :: k
k v :: v
v) = k -> ()
forall a. NFData a => a -> ()
rnf k
k () -> () -> ()
forall a b. a -> b -> b
`seq` v -> ()
forall a. NFData a => a -> ()
rnf v
v
rnf (More m :: Map k v
m) = Map k v -> ()
forall a. NFData a => a -> ()
rnf Map k v
m
newtype Map k v = Map (I.IntMap (Some k v)) deriving (Map k v -> Map k v -> Bool
(Map k v -> Map k v -> Bool)
-> (Map k v -> Map k v -> Bool) -> Eq (Map k v)
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall k v. (Eq k, Eq v) => Map k v -> Map k v -> Bool
/= :: Map k v -> Map k v -> Bool
$c/= :: forall k v. (Eq k, Eq v) => Map k v -> Map k v -> Bool
== :: Map k v -> Map k v -> Bool
$c== :: forall k v. (Eq k, Eq v) => Map k v -> Map k v -> Bool
Eq, Eq (Map k v)
Eq (Map k v) =>
(Map k v -> Map k v -> Ordering)
-> (Map k v -> Map k v -> Bool)
-> (Map k v -> Map k v -> Bool)
-> (Map k v -> Map k v -> Bool)
-> (Map k v -> Map k v -> Bool)
-> (Map k v -> Map k v -> Map k v)
-> (Map k v -> Map k v -> Map k v)
-> Ord (Map k v)
Map k v -> Map k v -> Bool
Map k v -> Map k v -> Ordering
Map k v -> Map k v -> Map k v
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 k v. (Ord k, Ord v) => Eq (Map k v)
forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Bool
forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Ordering
forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Map k v
min :: Map k v -> Map k v -> Map k v
$cmin :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Map k v
max :: Map k v -> Map k v -> Map k v
$cmax :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Map k v
>= :: Map k v -> Map k v -> Bool
$c>= :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Bool
> :: Map k v -> Map k v -> Bool
$c> :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Bool
<= :: Map k v -> Map k v -> Bool
$c<= :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Bool
< :: Map k v -> Map k v -> Bool
$c< :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Bool
compare :: Map k v -> Map k v -> Ordering
$ccompare :: forall k v. (Ord k, Ord v) => Map k v -> Map k v -> Ordering
$cp1Ord :: forall k v. (Ord k, Ord v) => Eq (Map k v)
Ord)
{-# DEPRECATED HashMap "HashMap is deprecated. Please use Map instead." #-}
type HashMap k v = Map k v
instance (NFData k, NFData v) => NFData (Map k v) where
rnf :: Map k v -> ()
rnf (Map m :: IntMap (Some k v)
m) = IntMap (Some k v) -> ()
forall a. NFData a => a -> ()
rnf IntMap (Some k v)
m
instance Functor (Map k) where
fmap :: (a -> b) -> Map k a -> Map k b
fmap = (a -> b) -> Map k a -> Map k b
forall a b k. (a -> b) -> Map k a -> Map k b
map
instance Ord k => Monoid (Map k a) where
mempty :: Map k a
mempty = Map k a
forall k a. Map k a
empty
mconcat :: [Map k a] -> Map k a
mconcat = [Map k a] -> Map k a
forall k a. Ord k => [Map k a] -> Map k a
unions
#if !(MIN_VERSION_base(4,9,0))
mappend = union
#else
mappend :: Map k a -> Map k a -> Map k a
mappend = Map k a -> Map k a -> Map k a
forall a. Semigroup a => a -> a -> a
(<>)
instance Ord k => Semigroup (Map k a) where
<> :: Map k a -> Map k a -> Map k a
(<>) = Map k a -> Map k a -> Map k a
forall k a. Ord k => Map k a -> Map k a -> Map k a
union
stimes :: b -> Map k a -> Map k a
stimes = b -> Map k a -> Map k a
forall b a. (Integral b, Monoid a) => b -> a -> a
stimesIdempotentMonoid
#endif
instance Foldable (Map k) where
foldMap :: (a -> m) -> Map k a -> m
foldMap f :: a -> m
f (Map m :: IntMap (Some k a)
m) = (Some k a -> m) -> IntMap (Some k a) -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap Some k a -> m
forall k. Some k a -> m
some_fold IntMap (Some k a)
m
where some_fold :: Some k a -> m
some_fold (Only _ x :: a
x) = a -> m
f a
x
some_fold (More s :: Map k a
s) = (a -> m) -> Map k a -> m
forall (t :: * -> *) m a.
(Foldable t, Monoid m) =>
(a -> m) -> t a -> m
foldMap a -> m
f Map k a
s
instance Traversable (Map k) where
traverse :: (a -> f b) -> Map k a -> f (Map k b)
traverse f :: a -> f b
f (Map m :: IntMap (Some k a)
m) = (IntMap (Some k b) -> Map k b) -> f (IntMap (Some k b) -> Map k b)
forall (f :: * -> *) a. Applicative f => a -> f a
pure IntMap (Some k b) -> Map k b
forall k v. IntMap (Some k v) -> Map k v
Map f (IntMap (Some k b) -> Map k b)
-> f (IntMap (Some k b)) -> f (Map k b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (Some k a -> f (Some k b))
-> IntMap (Some k a) -> f (IntMap (Some k b))
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse Some k a -> f (Some k b)
forall k. Some k a -> f (Some k b)
some_traverse IntMap (Some k a)
m
where some_traverse :: Some k a -> f (Some k b)
some_traverse (Only k :: k
k x :: a
x) = (b -> Some k b) -> f (b -> Some k b)
forall (f :: * -> *) a. Applicative f => a -> f a
pure (k -> b -> Some k b
forall k v. k -> v -> Some k v
Only k
k) f (b -> Some k b) -> f b -> f (Some k b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> a -> f b
f a
x
some_traverse (More s :: Map k a
s) = (Map k b -> Some k b) -> f (Map k b -> Some k b)
forall (f :: * -> *) a. Applicative f => a -> f a
pure Map k b -> Some k b
forall k v. Map k v -> Some k v
More f (Map k b -> Some k b) -> f (Map k b) -> f (Some k b)
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> (a -> f b) -> Map k a -> f (Map k b)
forall (t :: * -> *) (f :: * -> *) a b.
(Traversable t, Applicative f) =>
(a -> f b) -> t a -> f (t b)
traverse a -> f b
f Map k a
s
instance (Show k, Show a) => Show (Map k a) where
showsPrec :: Int -> Map k a -> ShowS
showsPrec d :: Int
d m :: Map k a
m = Bool -> ShowS -> ShowS
showParen (Int
d Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
> 10) (ShowS -> ShowS) -> ShowS -> ShowS
forall a b. (a -> b) -> a -> b
$
[Char] -> ShowS
showString "fromList " ShowS -> ShowS -> ShowS
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(k, a)] -> ShowS
forall a. Show a => a -> ShowS
shows (Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
toList Map k a
m)
instance (Read k, Hashable k, Ord k, Read a) => Read (Map k a) where
#ifdef __GLASGOW_HASKELL__
readPrec :: ReadPrec (Map k a)
readPrec = ReadPrec (Map k a) -> ReadPrec (Map k a)
forall a. ReadPrec a -> ReadPrec a
parens (ReadPrec (Map k a) -> ReadPrec (Map k a))
-> ReadPrec (Map k a) -> ReadPrec (Map k a)
forall a b. (a -> b) -> a -> b
$ Int -> ReadPrec (Map k a) -> ReadPrec (Map k a)
forall a. Int -> ReadPrec a -> ReadPrec a
prec 10 (ReadPrec (Map k a) -> ReadPrec (Map k a))
-> ReadPrec (Map k a) -> ReadPrec (Map k a)
forall a b. (a -> b) -> a -> b
$ do
Ident "fromList" <- ReadPrec Lexeme
lexP
[(k, a)]
xs <- ReadPrec [(k, a)]
forall a. Read a => ReadPrec a
readPrec
Map k a -> ReadPrec (Map k a)
forall (m :: * -> *) a. Monad m => a -> m a
return ([(k, a)] -> Map k a
forall k a. (Hashable k, Ord k) => [(k, a)] -> Map k a
fromList [(k, a)]
xs)
readListPrec :: ReadPrec [Map k a]
readListPrec = ReadPrec [Map k a]
forall a. Read a => ReadPrec [a]
readListPrecDefault
#else
readsPrec p = readParen (p > 10) $ \ r -> do
("fromList",s) <- lex r
(xs,t) <- reads s
return (fromList xs,t)
#endif
#include "hashmap.h"
INSTANCE_TYPEABLE2(Map,mapTc,"Map")
#if __GLASGOW_HASKELL__
instance (Data k, Hashable k, Ord k, Data a) => Data (Map k a) where
gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b)
-> (forall g. g -> c g) -> Map k a -> c (Map k a)
gfoldl f :: forall d b. Data d => c (d -> b) -> d -> c b
f z :: forall g. g -> c g
z m :: Map k a
m = ([(k, a)] -> Map k a) -> c ([(k, a)] -> Map k a)
forall g. g -> c g
z [(k, a)] -> Map k a
forall k a. (Hashable k, Ord k) => [(k, a)] -> Map k a
fromList c ([(k, a)] -> Map k a) -> [(k, a)] -> c (Map k a)
forall d b. Data d => c (d -> b) -> d -> c b
`f` (Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
toList Map k a
m)
toConstr :: Map k a -> Constr
toConstr _ = [Char] -> Constr
forall a. HasCallStack => [Char] -> a
error "toConstr"
gunfold :: (forall b r. Data b => c (b -> r) -> c r)
-> (forall r. r -> c r) -> Constr -> c (Map k a)
gunfold _ _ = [Char] -> Constr -> c (Map k a)
forall a. HasCallStack => [Char] -> a
error "gunfold"
dataTypeOf :: Map k a -> DataType
dataTypeOf _ = [Char] -> DataType
mkNoRepType "Data.HashMap.Map"
dataCast1 :: (forall d. Data d => c (t d)) -> Maybe (c (Map k a))
dataCast1 f :: forall d. Data d => c (t d)
f = c (t a) -> Maybe (c (Map k a))
forall k1 k2 (c :: k1 -> *) (t :: k2 -> k1) (t' :: k2 -> k1)
(a :: k2).
(Typeable t, Typeable t') =>
c (t a) -> Maybe (c (t' a))
gcast1 c (t a)
forall d. Data d => c (t d)
f
#endif
{-# INLINE eq #-}
eq :: Ord a => a -> a -> Bool
eq :: a -> a -> Bool
eq x :: a
x y :: a
y = a
x a -> a -> Ordering
forall a. Ord a => a -> a -> Ordering
`compare` a
y Ordering -> Ordering -> Bool
forall a. Eq a => a -> a -> Bool
== Ordering
EQ
null :: Map k a -> Bool
null :: Map k a -> Bool
null (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Bool
forall a. IntMap a -> Bool
I.null IntMap (Some k a)
m
size :: Map k a -> Int
size :: Map k a -> Int
size (Map m :: IntMap (Some k a)
m) = (Some k a -> Int -> Int) -> Int -> IntMap (Some k a) -> Int
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr (Int -> Int -> Int
forall a. Num a => a -> a -> a
(+) (Int -> Int -> Int) -> (Some k a -> Int) -> Some k a -> Int -> Int
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Some k a -> Int
forall k a. Some k a -> Int
some_size) 0 IntMap (Some k a)
m
where some_size :: Some k a -> Int
some_size (Only _ _) = 1
some_size (More s :: Map k a
s) = Map k a -> Int
forall k a. Map k a -> Int
M.size Map k a
s
member :: (Hashable k, Ord k) => k -> Map k a -> Bool
member :: k -> Map k a -> Bool
member k :: k
k m :: Map k a
m = case k -> Map k a -> Maybe a
forall k a. (Hashable k, Ord k) => k -> Map k a -> Maybe a
lookup k
k Map k a
m of
Nothing -> Bool
False
Just _ -> Bool
True
notMember :: (Hashable k, Ord k) => k -> Map k a -> Bool
notMember :: k -> Map k a -> Bool
notMember k :: k
k m :: Map k a
m = Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ k -> Map k a -> Bool
forall k a. (Hashable k, Ord k) => k -> Map k a -> Bool
member k
k Map k a
m
some_lookup :: Ord k => k -> Some k a -> Maybe a
some_lookup :: k -> Some k a -> Maybe a
some_lookup k :: k
k (Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = a -> Maybe a
forall a. a -> Maybe a
Just a
x
| Bool
otherwise = Maybe a
forall a. Maybe a
Nothing
some_lookup k :: k
k (More s :: Map k a
s) = k -> Map k a -> Maybe a
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup k
k Map k a
s
lookup :: (Hashable k, Ord k) => k -> Map k a -> Maybe a
lookup :: k -> Map k a -> Maybe a
lookup k :: k
k (Map m :: IntMap (Some k a)
m) = Int -> IntMap (Some k a) -> Maybe (Some k a)
forall a. Int -> IntMap a -> Maybe a
I.lookup (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m Maybe (Some k a) -> (Some k a -> Maybe a) -> Maybe a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= k -> Some k a -> Maybe a
forall k a. Ord k => k -> Some k a -> Maybe a
some_lookup k
k
findWithDefault :: (Hashable k, Ord k) => a -> k -> Map k a -> a
findWithDefault :: a -> k -> Map k a -> a
findWithDefault def :: a
def k :: k
k m :: Map k a
m = case k -> Map k a -> Maybe a
forall k a. (Hashable k, Ord k) => k -> Map k a -> Maybe a
lookup k
k Map k a
m of
Nothing -> a
def
Just x :: a
x -> a
x
empty :: Map k a
empty :: Map k a
empty = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map IntMap (Some k a)
forall a. IntMap a
I.empty
singleton :: Hashable k => k -> a -> Map k a
singleton :: k -> a -> Map k a
singleton k :: k
k x :: a
x = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
Int -> Some k a -> IntMap (Some k a)
forall a. Int -> a -> IntMap a
I.singleton (k -> Int
forall a. Hashable a => a -> Int
hash k
k) (Some k a -> IntMap (Some k a)) -> Some k a -> IntMap (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x)
insert :: (Hashable k, Ord k)
=> k -> a -> Map k a -> Map k a
insert :: k -> a -> Map k a -> Map k a
insert k :: k
k x :: a
x (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> Int -> Some k a -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> Int -> a -> IntMap a -> IntMap a
I.insertWith Some k a -> Some k a -> Some k a
forall p. p -> Some k a -> Some k a
some_insert (k -> Int
forall a. Hashable a => a -> Int
hash k
k) (k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x) IntMap (Some k a)
m
where some_insert :: p -> Some k a -> Some k a
some_insert _ (Only k' :: k
k' x' :: a
x') | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x
| Bool
otherwise = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert k
k a
x (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k' a
x')
some_insert _ (More s :: Map k a
s) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert k
k a
x Map k a
s
insertWith :: (Hashable k, Ord k)
=> (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith :: (a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith f :: a -> a -> a
f k :: k
k x :: a
x (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> Int -> Some k a -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> Int -> a -> IntMap a -> IntMap a
I.insertWith Some k a -> Some k a -> Some k a
forall p. p -> Some k a -> Some k a
some_insert_with (k -> Int
forall a. Hashable a => a -> Int
hash k
k) (k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x) IntMap (Some k a)
m
where some_insert_with :: p -> Some k a -> Some k a
some_insert_with _ (Only k' :: k
k' x' :: a
x') | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (a -> a -> a
f a
x a
x')
| Bool
otherwise = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert k
k a
x (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k' a
x')
some_insert_with _ (More s :: Map k a
s) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (a -> a -> a) -> k -> a -> Map k a -> Map k a
forall k a. Ord k => (a -> a -> a) -> k -> a -> Map k a -> Map k a
M.insertWith a -> a -> a
f k
k a
x Map k a
s
insertWithKey :: (Hashable k, Ord k)
=> (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWithKey f :: k -> a -> a -> a
f k :: k
k x :: a
x (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> Int -> Some k a -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> Int -> a -> IntMap a -> IntMap a
I.insertWith Some k a -> Some k a -> Some k a
forall p. p -> Some k a -> Some k a
some_insert_with_key (k -> Int
forall a. Hashable a => a -> Int
hash k
k) (k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x) IntMap (Some k a)
m
where some_insert_with_key :: p -> Some k a -> Some k a
some_insert_with_key _ (Only k' :: k
k' x' :: a
x') | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (k -> a -> a -> a
f k
k a
x a
x')
| Bool
otherwise = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert k
k a
x (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k' a
x')
some_insert_with_key _ (More s :: Map k a
s) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
M.insertWithKey k -> a -> a -> a
f k
k a
x Map k a
s
insertLookupWithKey :: (Hashable k, Ord k)
=> (k -> a -> a -> a) -> k -> a -> Map k a -> (Maybe a, Map k a)
insertLookupWithKey :: (k -> a -> a -> a) -> k -> a -> Map k a -> (Maybe a, Map k a)
insertLookupWithKey f :: k -> a -> a -> a
f k :: k
k x :: a
x (Map m :: IntMap (Some k a)
m) =
case (Int -> Some k a -> Some k a -> Some k a)
-> Int
-> Some k a
-> IntMap (Some k a)
-> (Maybe (Some k a), IntMap (Some k a))
forall a.
(Int -> a -> a -> a) -> Int -> a -> IntMap a -> (Maybe a, IntMap a)
I.insertLookupWithKey Int -> Some k a -> Some k a -> Some k a
forall p p. p -> p -> Some k a -> Some k a
some_insert_with_key (k -> Int
forall a. Hashable a => a -> Int
hash k
k) (k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k a
x) IntMap (Some k a)
m of
(found :: Maybe (Some k a)
found, m' :: IntMap (Some k a)
m') -> (Maybe (Some k a)
found Maybe (Some k a) -> (Some k a -> Maybe a) -> Maybe a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= k -> Some k a -> Maybe a
forall k a. Ord k => k -> Some k a -> Maybe a
some_lookup k
k, IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map IntMap (Some k a)
m')
where some_insert_with_key :: p -> p -> Some k a -> Some k a
some_insert_with_key _ _ (Only k' :: k
k' x' :: a
x') | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (k -> a -> a -> a
f k
k a
x a
x')
| Bool
otherwise = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ k -> a -> Map k a -> Map k a
forall k a. Ord k => k -> a -> Map k a -> Map k a
M.insert k
k a
x (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k' a
x')
some_insert_with_key _ _ (More s :: Map k a
s) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
M.insertWithKey k -> a -> a -> a
f k
k a
x Map k a
s
some_norm :: M.Map k v -> Maybe (Some k v)
some_norm :: Map k v -> Maybe (Some k v)
some_norm s :: Map k v
s = case Map k v -> Int
forall k a. Map k a -> Int
M.size Map k v
s of 0 -> Maybe (Some k v)
forall a. Maybe a
Nothing
1 -> case Map k v -> (k, v)
forall k a. Map k a -> (k, a)
M.findMin Map k v
s of (k :: k
k, x :: v
x) -> Some k v -> Maybe (Some k v)
forall a. a -> Maybe a
Just (Some k v -> Maybe (Some k v)) -> Some k v -> Maybe (Some k v)
forall a b. (a -> b) -> a -> b
$ k -> v -> Some k v
forall k v. k -> v -> Some k v
Only k
k v
x
_ -> Some k v -> Maybe (Some k v)
forall a. a -> Maybe a
Just (Some k v -> Maybe (Some k v)) -> Some k v -> Maybe (Some k v)
forall a b. (a -> b) -> a -> b
$ Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v
s
some_norm' :: M.Map k v -> Some k v
some_norm' :: Map k v -> Some k v
some_norm' s :: Map k v
s = case Map k v -> Int
forall k a. Map k a -> Int
M.size Map k v
s of 1 -> case Map k v -> (k, v)
forall k a. Map k a -> (k, a)
M.findMin Map k v
s of (k :: k
k, x :: v
x) -> k -> v -> Some k v
forall k v. k -> v -> Some k v
Only k
k v
x
_ -> Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v
s
delete :: (Hashable k, Ord k)
=> k -> Map k a -> Map k a
delete :: k -> Map k a -> Map k a
delete k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k a))
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> Maybe a) -> Int -> IntMap a -> IntMap a
I.update Some k a -> Maybe (Some k a)
forall v. Some k v -> Maybe (Some k v)
some_delete (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_delete :: Some k v -> Maybe (Some k v)
some_delete v :: Some k v
v@(Only k' :: k
k' _) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = Maybe (Some k v)
forall a. Maybe a
Nothing
| Bool
otherwise = Some k v -> Maybe (Some k v)
forall a. a -> Maybe a
Just Some k v
v
some_delete (More t :: Map k v
t) = Map k v -> Maybe (Some k v)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k v -> Maybe (Some k v)) -> Map k v -> Maybe (Some k v)
forall a b. (a -> b) -> a -> b
$ k -> Map k v -> Map k v
forall k a. Ord k => k -> Map k a -> Map k a
M.delete k
k Map k v
t
adjust :: (Hashable k, Ord k)
=> (a -> a) -> k -> Map k a -> Map k a
adjust :: (a -> a) -> k -> Map k a -> Map k a
adjust f :: a -> a
f k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a)
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a) -> Int -> IntMap a -> IntMap a
I.adjust Some k a -> Some k a
some_adjust (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_adjust :: Some k a -> Some k a
some_adjust v :: Some k a
v@(Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (a -> a
f a
x)
| Bool
otherwise = Some k a
v
some_adjust (More t :: Map k a
t) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (a -> a) -> k -> Map k a -> Map k a
forall k a. Ord k => (a -> a) -> k -> Map k a -> Map k a
M.adjust a -> a
f k
k Map k a
t
adjustWithKey :: (Hashable k, Ord k)
=> (k -> a -> a) -> k -> Map k a -> Map k a
adjustWithKey :: (k -> a -> a) -> k -> Map k a -> Map k a
adjustWithKey f :: k -> a -> a
f k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a)
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a) -> Int -> IntMap a -> IntMap a
I.adjust Some k a -> Some k a
some_adjust_with_key (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_adjust_with_key :: Some k a -> Some k a
some_adjust_with_key v :: Some k a
v@(Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (k -> a -> a
f k
k a
x)
| Bool
otherwise = Some k a
v
some_adjust_with_key (More t :: Map k a
t) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a) -> k -> Map k a -> Map k a
forall k a. Ord k => (k -> a -> a) -> k -> Map k a -> Map k a
M.adjustWithKey k -> a -> a
f k
k Map k a
t
update :: (Hashable k, Ord k)
=> (a -> Maybe a) -> k -> Map k a -> Map k a
update :: (a -> Maybe a) -> k -> Map k a -> Map k a
update f :: a -> Maybe a
f k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k a))
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> Maybe a) -> Int -> IntMap a -> IntMap a
I.update Some k a -> Maybe (Some k a)
some_update (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_update :: Some k a -> Maybe (Some k a)
some_update v :: Some k a
v@(Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = a -> Maybe a
f a
x Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k'
| Bool
otherwise = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
some_update (More t :: Map k a
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (a -> Maybe a) -> k -> Map k a -> Map k a
forall k a. Ord k => (a -> Maybe a) -> k -> Map k a -> Map k a
M.update a -> Maybe a
f k
k Map k a
t
updateWithKey :: (Hashable k, Ord k)
=> (k -> a -> Maybe a) -> k -> Map k a -> Map k a
updateWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> Map k a
updateWithKey f :: k -> a -> Maybe a
f k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k a))
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> Maybe a) -> Int -> IntMap a -> IntMap a
I.update Some k a -> Maybe (Some k a)
some_update_with_key (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_update_with_key :: Some k a -> Maybe (Some k a)
some_update_with_key v :: Some k a
v@(Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Maybe a
f k
k a
x Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k'
| Bool
otherwise = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
some_update_with_key (More t :: Map k a
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> Maybe a) -> k -> Map k a -> Map k a
forall k a. Ord k => (k -> a -> Maybe a) -> k -> Map k a -> Map k a
M.updateWithKey k -> a -> Maybe a
f k
k Map k a
t
updateLookupWithKey :: (Hashable k, Ord k)
=> (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)
updateLookupWithKey :: (k -> a -> Maybe a) -> k -> Map k a -> (Maybe a, Map k a)
updateLookupWithKey f :: k -> a -> Maybe a
f k :: k
k (Map m :: IntMap (Some k a)
m) =
case (Int -> Some k a -> Maybe (Some k a))
-> Int
-> IntMap (Some k a)
-> (Maybe (Some k a), IntMap (Some k a))
forall a.
(Int -> a -> Maybe a) -> Int -> IntMap a -> (Maybe a, IntMap a)
I.updateLookupWithKey Int -> Some k a -> Maybe (Some k a)
forall p. p -> Some k a -> Maybe (Some k a)
some_update_with_key (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m of
(found :: Maybe (Some k a)
found, m' :: IntMap (Some k a)
m') -> (Maybe (Some k a)
found Maybe (Some k a) -> (Some k a -> Maybe a) -> Maybe a
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= k -> Some k a -> Maybe a
forall k a. Ord k => k -> Some k a -> Maybe a
some_lookup k
k, IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map IntMap (Some k a)
m')
where some_update_with_key :: p -> Some k a -> Maybe (Some k a)
some_update_with_key _ v :: Some k a
v@(Only k' :: k
k' x :: a
x) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = k -> a -> Maybe a
f k
k a
x Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k'
| Bool
otherwise = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
some_update_with_key _ (More t :: Map k a
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> Maybe a) -> k -> Map k a -> Map k a
forall k a. Ord k => (k -> a -> Maybe a) -> k -> Map k a -> Map k a
M.updateWithKey k -> a -> Maybe a
f k
k Map k a
t
alter :: (Hashable k, Ord k)
=> (Maybe a -> Maybe a) -> k -> Map k a -> Map k a
alter :: (Maybe a -> Maybe a) -> k -> Map k a -> Map k a
alter f :: Maybe a -> Maybe a
f k :: k
k (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Maybe (Some k a) -> Maybe (Some k a))
-> Int -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (Maybe a -> Maybe a) -> Int -> IntMap a -> IntMap a
I.alter Maybe (Some k a) -> Maybe (Some k a)
some_alter (k -> Int
forall a. Hashable a => a -> Int
hash k
k) IntMap (Some k a)
m
where some_alter :: Maybe (Some k a) -> Maybe (Some k a)
some_alter Nothing = Maybe a -> Maybe a
f Maybe a
forall a. Maybe a
Nothing Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k
some_alter (Just v :: Some k a
v@(Only k' :: k
k' x :: a
x)) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
k' = Maybe a -> Maybe a
f (a -> Maybe a
forall a. a -> Maybe a
Just a
x) Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k'
| Bool
otherwise = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
some_alter (Just (More t :: Map k a
t)) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (Maybe a -> Maybe a) -> k -> Map k a -> Map k a
forall k a.
Ord k =>
(Maybe a -> Maybe a) -> k -> Map k a -> Map k a
M.alter Maybe a -> Maybe a
f k
k Map k a
t
unions :: Ord k => [Map k a] -> Map k a
unions :: [Map k a] -> Map k a
unions xs :: [Map k a]
xs = (Map k a -> Map k a -> Map k a) -> Map k a -> [Map k a] -> Map k a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' Map k a -> Map k a -> Map k a
forall k a. Ord k => Map k a -> Map k a -> Map k a
union Map k a
forall k a. Map k a
empty [Map k a]
xs
unionsWith :: Ord k => (a->a->a) -> [Map k a] -> Map k a
unionsWith :: (a -> a -> a) -> [Map k a] -> Map k a
unionsWith f :: a -> a -> a
f xs :: [Map k a]
xs = (Map k a -> Map k a -> Map k a) -> Map k a -> [Map k a] -> Map k a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' ((a -> a -> a) -> Map k a -> Map k a -> Map k a
forall k a. Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWith a -> a -> a
f) Map k a
forall k a. Map k a
empty [Map k a]
xs
union :: Ord k => Map k a -> Map k a -> Map k a
union :: Map k a -> Map k a -> Map k a
union (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k a)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> IntMap (Some k a) -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a
I.unionWith Some k a -> Some k a -> Some k a
forall k v. Ord k => Some k v -> Some k v -> Some k v
some_union IntMap (Some k a)
m1 IntMap (Some k a)
m2
where some_union :: Some k v -> Some k v -> Some k v
some_union v :: Some k v
v@(Only k :: k
k x :: v
x) (Only l :: k
l y :: v
y) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = Some k v
v
| Bool
otherwise = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (k -> v -> Map k v
forall k a. k -> a -> Map k a
M.singleton k
k v
x Map k v -> Map k v -> Map k v
forall k a. Ord k => Map k a -> Map k a -> Map k a
`M.union` k -> v -> Map k v
forall k a. k -> a -> Map k a
M.singleton k
l v
y)
some_union (Only k :: k
k x :: v
x) (More t :: Map k v
t) = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ k -> v -> Map k v
forall k a. k -> a -> Map k a
M.singleton k
k v
x Map k v -> Map k v -> Map k v
forall k a. Ord k => Map k a -> Map k a -> Map k a
`M.union` Map k v
t
some_union (More t :: Map k v
t) (Only k :: k
k x :: v
x) = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v
t Map k v -> Map k v -> Map k v
forall k a. Ord k => Map k a -> Map k a -> Map k a
`M.union` k -> v -> Map k v
forall k a. k -> a -> Map k a
M.singleton k
k v
x
some_union (More t :: Map k v
t) (More u :: Map k v
u) = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v
t Map k v -> Map k v -> Map k v
forall k a. Ord k => Map k a -> Map k a -> Map k a
`M.union` Map k v
u
some_union_with_key :: Ord k => (k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
some_union_with_key :: (k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
some_union_with_key f :: k -> a -> a -> a
f (Only k :: k
k x :: a
x) (Only l :: k
l y :: a
y) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k (k -> a -> a -> a
f k
k a
x a
y)
| Bool
otherwise = Map k a -> Some k a
forall k v. Map k v -> Some k v
More ((k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
M.unionWithKey k -> a -> a -> a
f (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k a
x) (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
l a
y))
some_union_with_key f :: k -> a -> a -> a
f (Only k :: k
k x :: a
x) (More t :: Map k a
t) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
M.unionWithKey k -> a -> a -> a
f (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k a
x) Map k a
t
some_union_with_key f :: k -> a -> a -> a
f (More t :: Map k a
t) (Only k :: k
k x :: a
x) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
M.unionWithKey k -> a -> a -> a
f Map k a
t (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k a
x)
some_union_with_key f :: k -> a -> a -> a
f (More t :: Map k a
t) (More u :: Map k a
u) = Map k a -> Some k a
forall k v. Map k v -> Some k v
More (Map k a -> Some k a) -> Map k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
M.unionWithKey k -> a -> a -> a
f Map k a
t Map k a
u
unionWith :: Ord k => (a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWith :: (a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWith f :: a -> a -> a
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k a)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> IntMap (Some k a) -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a
I.unionWith ((k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
some_union_with_key ((k -> a -> a -> a) -> Some k a -> Some k a -> Some k a)
-> (k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
forall a b. (a -> b) -> a -> b
$ (a -> a -> a) -> k -> a -> a -> a
forall a b. a -> b -> a
const a -> a -> a
f) IntMap (Some k a)
m1 IntMap (Some k a)
m2
unionWithKey :: Ord k => (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWithKey :: (k -> a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWithKey f :: k -> a -> a -> a
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k a)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k a -> Some k a)
-> IntMap (Some k a) -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> a -> a) -> IntMap a -> IntMap a -> IntMap a
I.unionWith ((k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
forall k a.
Ord k =>
(k -> a -> a -> a) -> Some k a -> Some k a -> Some k a
some_union_with_key k -> a -> a -> a
f) IntMap (Some k a)
m1 IntMap (Some k a)
m2
difference :: Ord k => Map k a -> Map k b -> Map k a
difference :: Map k a -> Map k b -> Map k a
difference (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Maybe (Some k a))
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k a)
forall a b. (a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a
I.differenceWith Some k a -> Some k b -> Maybe (Some k a)
forall k v b. Ord k => Some k v -> Some k b -> Maybe (Some k v)
some_diff IntMap (Some k a)
m1 IntMap (Some k b)
m2
where some_diff :: Some k v -> Some k b -> Maybe (Some k v)
some_diff v :: Some k v
v@(Only k :: k
k _) (Only l :: k
l _) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = Maybe (Some k v)
forall a. Maybe a
Nothing
| Bool
otherwise = Some k v -> Maybe (Some k v)
forall a. a -> Maybe a
Just Some k v
v
some_diff v :: Some k v
v@(Only k :: k
k _) (More t :: Map k b
t) | k
k k -> Map k b -> Bool
forall k a. Ord k => k -> Map k a -> Bool
`M.member` Map k b
t = Maybe (Some k v)
forall a. Maybe a
Nothing
| Bool
otherwise = Some k v -> Maybe (Some k v)
forall a. a -> Maybe a
Just Some k v
v
some_diff (More t :: Map k v
t) (Only k :: k
k _) = Map k v -> Maybe (Some k v)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k v -> Maybe (Some k v)) -> Map k v -> Maybe (Some k v)
forall a b. (a -> b) -> a -> b
$ k -> Map k v -> Map k v
forall k a. Ord k => k -> Map k a -> Map k a
M.delete k
k Map k v
t
some_diff (More t :: Map k v
t) (More u :: Map k b
u) = Map k v -> Maybe (Some k v)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k v -> Maybe (Some k v)) -> Map k v -> Maybe (Some k v)
forall a b. (a -> b) -> a -> b
$ Map k v
t Map k v -> Map k b -> Map k v
forall k a b. Ord k => Map k a -> Map k b -> Map k a
`M.difference` Map k b
u
some_diff_with_key :: Ord k => (k -> a -> b -> Maybe a) -> Some k a -> Some k b -> Maybe (Some k a)
some_diff_with_key :: (k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a)
some_diff_with_key f :: k -> a -> b -> Maybe a
f v :: Some k a
v@(Only k :: k
k x :: a
x) (Only l :: k
l y :: b
y) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = k -> a -> b -> Maybe a
f k
k a
x b
y Maybe a -> (a -> Maybe (Some k a)) -> Maybe (Some k a)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k a -> Maybe (Some k a)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k a -> Maybe (Some k a))
-> (a -> Some k a) -> a -> Maybe (Some k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Some k a
forall k v. k -> v -> Some k v
Only k
k
| Bool
otherwise = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
some_diff_with_key f :: k -> a -> b -> Maybe a
f (Only k :: k
k x :: a
x) (More t :: Map k b
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
forall k a b.
Ord k =>
(k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
M.differenceWithKey k -> a -> b -> Maybe a
f (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k a
x) Map k b
t
some_diff_with_key f :: k -> a -> b -> Maybe a
f (More t :: Map k a
t) (Only k :: k
k x :: b
x) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
forall k a b.
Ord k =>
(k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
M.differenceWithKey k -> a -> b -> Maybe a
f Map k a
t (k -> b -> Map k b
forall k a. k -> a -> Map k a
M.singleton k
k b
x)
some_diff_with_key f :: k -> a -> b -> Maybe a
f (More t :: Map k a
t) (More u :: Map k b
u) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
forall k a b.
Ord k =>
(k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
M.differenceWithKey k -> a -> b -> Maybe a
f Map k a
t Map k b
u
differenceWith :: Ord k => (a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
differenceWith :: (a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
differenceWith f :: a -> b -> Maybe a
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Maybe (Some k a))
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k a)
forall a b. (a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a
I.differenceWith ((k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a)
forall k a b.
Ord k =>
(k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a)
some_diff_with_key ((k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a))
-> (k -> a -> b -> Maybe a)
-> Some k a
-> Some k b
-> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (a -> b -> Maybe a) -> k -> a -> b -> Maybe a
forall a b. a -> b -> a
const a -> b -> Maybe a
f) IntMap (Some k a)
m1 IntMap (Some k b)
m2
differenceWithKey :: Ord k => (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
differenceWithKey :: (k -> a -> b -> Maybe a) -> Map k a -> Map k b -> Map k a
differenceWithKey f :: k -> a -> b -> Maybe a
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Maybe (Some k a))
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k a)
forall a b. (a -> b -> Maybe a) -> IntMap a -> IntMap b -> IntMap a
I.differenceWith ((k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a)
forall k a b.
Ord k =>
(k -> a -> b -> Maybe a)
-> Some k a -> Some k b -> Maybe (Some k a)
some_diff_with_key k -> a -> b -> Maybe a
f) IntMap (Some k a)
m1 IntMap (Some k b)
m2
delete_empty :: I.IntMap (Some k a) -> I.IntMap (Some k a)
delete_empty :: IntMap (Some k a) -> IntMap (Some k a)
delete_empty = (Some k a -> Bool) -> IntMap (Some k a) -> IntMap (Some k a)
forall a. (a -> Bool) -> IntMap a -> IntMap a
I.filter Some k a -> Bool
forall k a. Some k a -> Bool
some_empty
where some_empty :: Some k a -> Bool
some_empty (Only _ _) = Bool
True
some_empty (More t :: Map k a
t) = Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Map k a -> Bool
forall k a. Map k a -> Bool
M.null Map k a
t
intersection :: Ord k => Map k a -> Map k b -> Map k a
intersection :: Map k a -> Map k b -> Map k a
intersection (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$ IntMap (Some k a) -> IntMap (Some k a)
forall k a. IntMap (Some k a) -> IntMap (Some k a)
delete_empty (IntMap (Some k a) -> IntMap (Some k a))
-> IntMap (Some k a) -> IntMap (Some k a)
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Some k a)
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k a)
forall a b c. (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c
I.intersectionWith Some k a -> Some k b -> Some k a
forall k v b. Ord k => Some k v -> Some k b -> Some k v
some_intersection IntMap (Some k a)
m1 IntMap (Some k b)
m2
where some_intersection :: Some k v -> Some k b -> Some k v
some_intersection v :: Some k v
v@(Only k :: k
k _) (Only l :: k
l _) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = Some k v
v
| Bool
otherwise = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v
forall k a. Map k a
M.empty)
some_intersection v :: Some k v
v@(Only k :: k
k _) (More t :: Map k b
t) | k
k k -> Map k b -> Bool
forall k a. Ord k => k -> Map k a -> Bool
`M.member` Map k b
t = Some k v
v
| Bool
otherwise = Map k v -> Some k v
forall k v. Map k v -> Some k v
More (Map k v
forall k a. Map k a
M.empty)
some_intersection (More t :: Map k v
t) (Only k :: k
k x :: b
x) = Map k v -> Some k v
forall k v. Map k v -> Some k v
some_norm' (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v -> Map k b -> Map k v
forall k a b. Ord k => Map k a -> Map k b -> Map k a
M.intersection Map k v
t (k -> b -> Map k b
forall k a. k -> a -> Map k a
M.singleton k
k b
x)
some_intersection (More t :: Map k v
t) (More u :: Map k b
u) = Map k v -> Some k v
forall k v. Map k v -> Some k v
some_norm' (Map k v -> Some k v) -> Map k v -> Some k v
forall a b. (a -> b) -> a -> b
$ Map k v -> Map k b -> Map k v
forall k a b. Ord k => Map k a -> Map k b -> Map k a
M.intersection Map k v
t Map k b
u
some_intersection_with_key :: Ord k => (k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
some_intersection_with_key :: (k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
some_intersection_with_key f :: k -> a -> b -> c
f (Only k :: k
k x :: a
x) (Only l :: k
l y :: b
y) | k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l = k -> c -> Some k c
forall k v. k -> v -> Some k v
Only k
k (k -> a -> b -> c
f k
k a
x b
y)
| Bool
otherwise = Map k c -> Some k c
forall k v. Map k v -> Some k v
More (Map k c
forall k a. Map k a
M.empty)
some_intersection_with_key f :: k -> a -> b -> c
f (Only k :: k
k x :: a
x) (More t :: Map k b
t) = Map k c -> Some k c
forall k v. Map k v -> Some k v
some_norm' (Map k c -> Some k c) -> Map k c -> Some k c
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
forall k a b c.
Ord k =>
(k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
M.intersectionWithKey k -> a -> b -> c
f (k -> a -> Map k a
forall k a. k -> a -> Map k a
M.singleton k
k a
x) Map k b
t
some_intersection_with_key f :: k -> a -> b -> c
f (More t :: Map k a
t) (Only k :: k
k x :: b
x) = Map k c -> Some k c
forall k v. Map k v -> Some k v
some_norm' (Map k c -> Some k c) -> Map k c -> Some k c
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
forall k a b c.
Ord k =>
(k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
M.intersectionWithKey k -> a -> b -> c
f Map k a
t (k -> b -> Map k b
forall k a. k -> a -> Map k a
M.singleton k
k b
x)
some_intersection_with_key f :: k -> a -> b -> c
f (More t :: Map k a
t) (More u :: Map k b
u) = Map k c -> Some k c
forall k v. Map k v -> Some k v
some_norm' (Map k c -> Some k c) -> Map k c -> Some k c
forall a b. (a -> b) -> a -> b
$ (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
forall k a b c.
Ord k =>
(k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
M.intersectionWithKey k -> a -> b -> c
f Map k a
t Map k b
u
intersectionWith :: Ord k => (a -> b -> c) -> Map k a -> Map k b -> Map k c
intersectionWith :: (a -> b -> c) -> Map k a -> Map k b -> Map k c
intersectionWith f :: a -> b -> c
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k c) -> Map k c
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k c) -> Map k c) -> IntMap (Some k c) -> Map k c
forall a b. (a -> b) -> a -> b
$ IntMap (Some k c) -> IntMap (Some k c)
forall k a. IntMap (Some k a) -> IntMap (Some k a)
delete_empty (IntMap (Some k c) -> IntMap (Some k c))
-> IntMap (Some k c) -> IntMap (Some k c)
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Some k c)
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k c)
forall a b c. (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c
I.intersectionWith ((k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
forall k a b c.
Ord k =>
(k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
some_intersection_with_key ((k -> a -> b -> c) -> Some k a -> Some k b -> Some k c)
-> (k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
forall a b. (a -> b) -> a -> b
$ (a -> b -> c) -> k -> a -> b -> c
forall a b. a -> b -> a
const a -> b -> c
f) IntMap (Some k a)
m1 IntMap (Some k b)
m2
intersectionWithKey :: Ord k => (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
intersectionWithKey :: (k -> a -> b -> c) -> Map k a -> Map k b -> Map k c
intersectionWithKey f :: k -> a -> b -> c
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) = IntMap (Some k c) -> Map k c
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k c) -> Map k c) -> IntMap (Some k c) -> Map k c
forall a b. (a -> b) -> a -> b
$ IntMap (Some k c) -> IntMap (Some k c)
forall k a. IntMap (Some k a) -> IntMap (Some k a)
delete_empty (IntMap (Some k c) -> IntMap (Some k c))
-> IntMap (Some k c) -> IntMap (Some k c)
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b -> Some k c)
-> IntMap (Some k a) -> IntMap (Some k b) -> IntMap (Some k c)
forall a b c. (a -> b -> c) -> IntMap a -> IntMap b -> IntMap c
I.intersectionWith ((k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
forall k a b c.
Ord k =>
(k -> a -> b -> c) -> Some k a -> Some k b -> Some k c
some_intersection_with_key k -> a -> b -> c
f) IntMap (Some k a)
m1 IntMap (Some k b)
m2
isProperSubmapOf :: (Ord k, Eq a) => Map k a -> Map k a -> Bool
isProperSubmapOf :: Map k a -> Map k a -> Bool
isProperSubmapOf m1 :: Map k a
m1 m2 :: Map k a
m2 = Map k a -> Map k a -> Bool
forall k a. (Ord k, Eq a) => Map k a -> Map k a -> Bool
isSubmapOf Map k a
m1 Map k a
m2 Bool -> Bool -> Bool
&& Map k a -> Int
forall k a. Map k a -> Int
size Map k a
m1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Map k a -> Int
forall k a. Map k a -> Int
size Map k a
m2
isProperSubmapOfBy :: Ord k => (a -> b -> Bool) -> Map k a -> Map k b -> Bool
isProperSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool
isProperSubmapOfBy f :: a -> b -> Bool
f m1 :: Map k a
m1 m2 :: Map k b
m2 = (a -> b -> Bool) -> Map k a -> Map k b -> Bool
forall k a b.
Ord k =>
(a -> b -> Bool) -> Map k a -> Map k b -> Bool
isSubmapOfBy a -> b -> Bool
f Map k a
m1 Map k b
m2 Bool -> Bool -> Bool
&& Map k a -> Int
forall k a. Map k a -> Int
size Map k a
m1 Int -> Int -> Bool
forall a. Ord a => a -> a -> Bool
< Map k b -> Int
forall k a. Map k a -> Int
size Map k b
m2
isSubmapOf :: (Ord k, Eq a) => Map k a -> Map k a -> Bool
isSubmapOf :: Map k a -> Map k a -> Bool
isSubmapOf (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k a)
m2) =
(Some k a -> Some k a -> Bool)
-> IntMap (Some k a) -> IntMap (Some k a) -> Bool
forall a b. (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool
I.isSubmapOfBy Some k a -> Some k a -> Bool
forall k a. (Ord k, Eq a) => Some k a -> Some k a -> Bool
some_isSubmapOf IntMap (Some k a)
m1 IntMap (Some k a)
m2
where some_isSubmapOf :: Some k a -> Some k a -> Bool
some_isSubmapOf (Only k :: k
k _) (Only l :: k
l _) = k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l
some_isSubmapOf (Only k :: k
k _) (More t :: Map k a
t) = k
k k -> Map k a -> Bool
forall k a. Ord k => k -> Map k a -> Bool
`M.member` Map k a
t
some_isSubmapOf (More _) (Only _ _) = Bool
False
some_isSubmapOf (More t :: Map k a
t) (More u :: Map k a
u) = Map k a
t Map k a -> Map k a -> Bool
forall k a. (Ord k, Eq a) => Map k a -> Map k a -> Bool
`M.isSubmapOf` Map k a
u
isSubmapOfBy :: Ord k => (a -> b -> Bool) -> Map k a -> Map k b -> Bool
isSubmapOfBy :: (a -> b -> Bool) -> Map k a -> Map k b -> Bool
isSubmapOfBy f :: a -> b -> Bool
f (Map m1 :: IntMap (Some k a)
m1) (Map m2 :: IntMap (Some k b)
m2) =
(Some k a -> Some k b -> Bool)
-> IntMap (Some k a) -> IntMap (Some k b) -> Bool
forall a b. (a -> b -> Bool) -> IntMap a -> IntMap b -> Bool
I.isSubmapOfBy Some k a -> Some k b -> Bool
forall k. Ord k => Some k a -> Some k b -> Bool
some_isSubmapOfBy IntMap (Some k a)
m1 IntMap (Some k b)
m2
where some_isSubmapOfBy :: Some k a -> Some k b -> Bool
some_isSubmapOfBy (Only k :: k
k x :: a
x) (Only l :: k
l y :: b
y) = k
k k -> k -> Bool
forall a. Ord a => a -> a -> Bool
`eq` k
l Bool -> Bool -> Bool
&& a
x a -> b -> Bool
`f` b
y
some_isSubmapOfBy (Only k :: k
k x :: a
x) (More t :: Map k b
t) = case k -> Map k b -> Maybe b
forall k a. Ord k => k -> Map k a -> Maybe a
M.lookup k
k Map k b
t of
Just y :: b
y -> a -> b -> Bool
f a
x b
y
_ -> Bool
False
some_isSubmapOfBy (More _) (Only _ _) = Bool
False
some_isSubmapOfBy (More t :: Map k a
t) (More u :: Map k b
u) = (a -> b -> Bool) -> Map k a -> Map k b -> Bool
forall k a b.
Ord k =>
(a -> b -> Bool) -> Map k a -> Map k b -> Bool
M.isSubmapOfBy a -> b -> Bool
f Map k a
t Map k b
u
map :: (a -> b) -> Map k a -> Map k b
map :: (a -> b) -> Map k a -> Map k b
map f :: a -> b
f (Map m :: IntMap (Some k a)
m) = IntMap (Some k b) -> Map k b
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k b) -> Map k b) -> IntMap (Some k b) -> Map k b
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b) -> IntMap (Some k a) -> IntMap (Some k b)
forall a b. (a -> b) -> IntMap a -> IntMap b
I.map Some k a -> Some k b
forall k. Some k a -> Some k b
some_map IntMap (Some k a)
m
where some_map :: Some k a -> Some k b
some_map (Only k :: k
k x :: a
x) = k -> b -> Some k b
forall k v. k -> v -> Some k v
Only k
k (b -> Some k b) -> b -> Some k b
forall a b. (a -> b) -> a -> b
$ a -> b
f a
x
some_map (More t :: Map k a
t) = Map k b -> Some k b
forall k v. Map k v -> Some k v
More (Map k b -> Some k b) -> Map k b -> Some k b
forall a b. (a -> b) -> a -> b
$ (a -> b) -> Map k a -> Map k b
forall a b k. (a -> b) -> Map k a -> Map k b
M.map a -> b
f Map k a
t
mapWithKey :: (k -> a -> b) -> Map k a -> Map k b
mapWithKey :: (k -> a -> b) -> Map k a -> Map k b
mapWithKey f :: k -> a -> b
f (Map m :: IntMap (Some k a)
m) = IntMap (Some k b) -> Map k b
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k b) -> Map k b) -> IntMap (Some k b) -> Map k b
forall a b. (a -> b) -> a -> b
$
(Some k a -> Some k b) -> IntMap (Some k a) -> IntMap (Some k b)
forall a b. (a -> b) -> IntMap a -> IntMap b
I.map Some k a -> Some k b
some_map_with_key IntMap (Some k a)
m
where some_map_with_key :: Some k a -> Some k b
some_map_with_key (Only k :: k
k x :: a
x) = k -> b -> Some k b
forall k v. k -> v -> Some k v
Only k
k (b -> Some k b) -> b -> Some k b
forall a b. (a -> b) -> a -> b
$ k -> a -> b
f k
k a
x
some_map_with_key (More t :: Map k a
t) = Map k b -> Some k b
forall k v. Map k v -> Some k v
More (Map k b -> Some k b) -> Map k b -> Some k b
forall a b. (a -> b) -> a -> b
$ (k -> a -> b) -> Map k a -> Map k b
forall k a b. (k -> a -> b) -> Map k a -> Map k b
M.mapWithKey k -> a -> b
f Map k a
t
mapAccum :: (a -> b -> (a,c)) -> a -> Map k b -> (a,Map k c)
mapAccum :: (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
mapAccum f :: a -> b -> (a, c)
f a :: a
a (Map m :: IntMap (Some k b)
m) =
case (a -> Some k b -> (a, Some k c))
-> a -> IntMap (Some k b) -> (a, IntMap (Some k c))
forall a b c. (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c)
I.mapAccum a -> Some k b -> (a, Some k c)
forall k. a -> Some k b -> (a, Some k c)
some_map_accum a
a IntMap (Some k b)
m of
(acc :: a
acc, m' :: IntMap (Some k c)
m') -> (a
acc, IntMap (Some k c) -> Map k c
forall k v. IntMap (Some k v) -> Map k v
Map IntMap (Some k c)
m')
where some_map_accum :: a -> Some k b -> (a, Some k c)
some_map_accum acc :: a
acc (Only k :: k
k x :: b
x) = case a -> b -> (a, c)
f a
acc b
x of (acc' :: a
acc', x' :: c
x') -> (a
acc', k -> c -> Some k c
forall k v. k -> v -> Some k v
Only k
k c
x')
some_map_accum acc :: a
acc (More t :: Map k b
t) = case (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
forall a b c k. (a -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
M.mapAccum a -> b -> (a, c)
f a
acc Map k b
t of (acc' :: a
acc', t' :: Map k c
t') -> (a
acc', Map k c -> Some k c
forall k v. Map k v -> Some k v
More Map k c
t')
mapAccumWithKey :: (a -> k -> b -> (a,c)) -> a -> Map k b -> (a,Map k c)
mapAccumWithKey :: (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
mapAccumWithKey f :: a -> k -> b -> (a, c)
f a :: a
a (Map m :: IntMap (Some k b)
m) =
case (a -> Some k b -> (a, Some k c))
-> a -> IntMap (Some k b) -> (a, IntMap (Some k c))
forall a b c. (a -> b -> (a, c)) -> a -> IntMap b -> (a, IntMap c)
I.mapAccum a -> Some k b -> (a, Some k c)
some_map_accum_with_key a
a IntMap (Some k b)
m of
(acc :: a
acc, m' :: IntMap (Some k c)
m') -> (a
acc, IntMap (Some k c) -> Map k c
forall k v. IntMap (Some k v) -> Map k v
Map IntMap (Some k c)
m')
where some_map_accum_with_key :: a -> Some k b -> (a, Some k c)
some_map_accum_with_key acc :: a
acc (Only k :: k
k x :: b
x) = case a -> k -> b -> (a, c)
f a
acc k
k b
x of (acc' :: a
acc', x' :: c
x') -> (a
acc', k -> c -> Some k c
forall k v. k -> v -> Some k v
Only k
k c
x')
some_map_accum_with_key acc :: a
acc (More t :: Map k b
t) = case (a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
forall a k b c.
(a -> k -> b -> (a, c)) -> a -> Map k b -> (a, Map k c)
M.mapAccumWithKey a -> k -> b -> (a, c)
f a
acc Map k b
t of (acc' :: a
acc', t' :: Map k c
t') -> (a
acc', Map k c -> Some k c
forall k v. Map k v -> Some k v
More Map k c
t')
filter :: Ord k => (a -> Bool) -> Map k a -> Map k a
filter :: (a -> Bool) -> Map k a -> Map k a
filter p :: a -> Bool
p (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k a))
-> IntMap (Some k a) -> IntMap (Some k a)
forall a b. (a -> Maybe b) -> IntMap a -> IntMap b
I.mapMaybe Some k a -> Maybe (Some k a)
forall k. Some k a -> Maybe (Some k a)
some_filter IntMap (Some k a)
m
where some_filter :: Some k a -> Maybe (Some k a)
some_filter v :: Some k a
v@(Only _ x :: a
x) | a -> Bool
p a
x = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
| Bool
otherwise = Maybe (Some k a)
forall a. Maybe a
Nothing
some_filter (More t :: Map k a
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (a -> Bool) -> Map k a -> Map k a
forall a k. (a -> Bool) -> Map k a -> Map k a
M.filter a -> Bool
p Map k a
t
filterWithKey :: Ord k => (k -> a -> Bool) -> Map k a -> Map k a
filterWithKey :: (k -> a -> Bool) -> Map k a -> Map k a
filterWithKey p :: k -> a -> Bool
p (Map m :: IntMap (Some k a)
m) = IntMap (Some k a) -> Map k a
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k a) -> Map k a) -> IntMap (Some k a) -> Map k a
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k a))
-> IntMap (Some k a) -> IntMap (Some k a)
forall a b. (a -> Maybe b) -> IntMap a -> IntMap b
I.mapMaybe Some k a -> Maybe (Some k a)
some_filter_with_key IntMap (Some k a)
m
where some_filter_with_key :: Some k a -> Maybe (Some k a)
some_filter_with_key v :: Some k a
v@(Only k :: k
k x :: a
x) | k -> a -> Bool
p k
k a
x = Some k a -> Maybe (Some k a)
forall a. a -> Maybe a
Just Some k a
v
| Bool
otherwise = Maybe (Some k a)
forall a. Maybe a
Nothing
some_filter_with_key (More t :: Map k a
t) = Map k a -> Maybe (Some k a)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k a -> Maybe (Some k a)) -> Map k a -> Maybe (Some k a)
forall a b. (a -> b) -> a -> b
$ (k -> a -> Bool) -> Map k a -> Map k a
forall k a. (k -> a -> Bool) -> Map k a -> Map k a
M.filterWithKey k -> a -> Bool
p Map k a
t
partition :: Ord k => (a -> Bool) -> Map k a -> (Map k a, Map k a)
partition :: (a -> Bool) -> Map k a -> (Map k a, Map k a)
partition p :: a -> Bool
p m :: Map k a
m = ((a -> Bool) -> Map k a -> Map k a
forall k a. Ord k => (a -> Bool) -> Map k a -> Map k a
filter a -> Bool
p Map k a
m, (a -> Bool) -> Map k a -> Map k a
forall k a. Ord k => (a -> Bool) -> Map k a -> Map k a
filter (Bool -> Bool
not (Bool -> Bool) -> (a -> Bool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Bool
p) Map k a
m)
partitionWithKey :: Ord k => (k -> a -> Bool) -> Map k a -> (Map k a, Map k a)
partitionWithKey :: (k -> a -> Bool) -> Map k a -> (Map k a, Map k a)
partitionWithKey p :: k -> a -> Bool
p m :: Map k a
m = ((k -> a -> Bool) -> Map k a -> Map k a
forall k a. Ord k => (k -> a -> Bool) -> Map k a -> Map k a
filterWithKey k -> a -> Bool
p Map k a
m, (k -> a -> Bool) -> Map k a -> Map k a
forall k a. Ord k => (k -> a -> Bool) -> Map k a -> Map k a
filterWithKey (\k :: k
k -> Bool -> Bool
not (Bool -> Bool) -> (a -> Bool) -> a -> Bool
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> a -> Bool
p k
k) Map k a
m)
mapMaybe :: Ord k => (a -> Maybe b) -> Map k a -> Map k b
mapMaybe :: (a -> Maybe b) -> Map k a -> Map k b
mapMaybe f :: a -> Maybe b
f (Map m :: IntMap (Some k a)
m) = IntMap (Some k b) -> Map k b
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k b) -> Map k b) -> IntMap (Some k b) -> Map k b
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k b))
-> IntMap (Some k a) -> IntMap (Some k b)
forall a b. (a -> Maybe b) -> IntMap a -> IntMap b
I.mapMaybe Some k a -> Maybe (Some k b)
forall k. Some k a -> Maybe (Some k b)
some_map_maybe IntMap (Some k a)
m
where some_map_maybe :: Some k a -> Maybe (Some k b)
some_map_maybe (Only k :: k
k x :: a
x) = a -> Maybe b
f a
x Maybe b -> (b -> Maybe (Some k b)) -> Maybe (Some k b)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k b -> Maybe (Some k b)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k b -> Maybe (Some k b))
-> (b -> Some k b) -> b -> Maybe (Some k b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> b -> Some k b
forall k v. k -> v -> Some k v
Only k
k
some_map_maybe (More t :: Map k a
t) = Map k b -> Maybe (Some k b)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k b -> Maybe (Some k b)) -> Map k b -> Maybe (Some k b)
forall a b. (a -> b) -> a -> b
$ (a -> Maybe b) -> Map k a -> Map k b
forall a b k. (a -> Maybe b) -> Map k a -> Map k b
M.mapMaybe a -> Maybe b
f Map k a
t
mapMaybeWithKey :: Ord k => (k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey :: (k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey f :: k -> a -> Maybe b
f (Map m :: IntMap (Some k a)
m) = IntMap (Some k b) -> Map k b
forall k v. IntMap (Some k v) -> Map k v
Map (IntMap (Some k b) -> Map k b) -> IntMap (Some k b) -> Map k b
forall a b. (a -> b) -> a -> b
$
(Some k a -> Maybe (Some k b))
-> IntMap (Some k a) -> IntMap (Some k b)
forall a b. (a -> Maybe b) -> IntMap a -> IntMap b
I.mapMaybe Some k a -> Maybe (Some k b)
some_map_maybe_with_key IntMap (Some k a)
m
where some_map_maybe_with_key :: Some k a -> Maybe (Some k b)
some_map_maybe_with_key (Only k :: k
k x :: a
x) = k -> a -> Maybe b
f k
k a
x Maybe b -> (b -> Maybe (Some k b)) -> Maybe (Some k b)
forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= Some k b -> Maybe (Some k b)
forall (m :: * -> *) a. Monad m => a -> m a
return (Some k b -> Maybe (Some k b))
-> (b -> Some k b) -> b -> Maybe (Some k b)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. k -> b -> Some k b
forall k v. k -> v -> Some k v
Only k
k
some_map_maybe_with_key (More t :: Map k a
t) = Map k b -> Maybe (Some k b)
forall k v. Map k v -> Maybe (Some k v)
some_norm (Map k b -> Maybe (Some k b)) -> Map k b -> Maybe (Some k b)
forall a b. (a -> b) -> a -> b
$ (k -> a -> Maybe b) -> Map k a -> Map k b
forall k a b. (k -> a -> Maybe b) -> Map k a -> Map k b
M.mapMaybeWithKey k -> a -> Maybe b
f Map k a
t
mapEither :: Ord k => (a -> Either b c) -> Map k a -> (Map k b, Map k c)
mapEither :: (a -> Either b c) -> Map k a -> (Map k b, Map k c)
mapEither f :: a -> Either b c
f m :: Map k a
m = ((a -> Maybe b) -> Map k a -> Map k b
forall k a b. Ord k => (a -> Maybe b) -> Map k a -> Map k b
mapMaybe (Either b c -> Maybe b
forall a b. Either a b -> Maybe a
maybe_left (Either b c -> Maybe b) -> (a -> Either b c) -> a -> Maybe b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Either b c
f) Map k a
m, (a -> Maybe c) -> Map k a -> Map k c
forall k a b. Ord k => (a -> Maybe b) -> Map k a -> Map k b
mapMaybe (Either b c -> Maybe c
forall a b. Either a b -> Maybe b
maybe_right (Either b c -> Maybe c) -> (a -> Either b c) -> a -> Maybe c
forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> Either b c
f) Map k a
m)
mapEitherWithKey :: Ord k => (k -> a -> Either b c) -> Map k a -> (Map k b, Map k c)
mapEitherWithKey :: (k -> a -> Either b c) -> Map k a -> (Map k b, Map k c)
mapEitherWithKey f :: k -> a -> Either b c
f m :: Map k a
m = ((k -> a -> Maybe b) -> Map k a -> Map k b
forall k a b. Ord k => (k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey (\k :: k
k a :: a
a -> Either b c -> Maybe b
forall a b. Either a b -> Maybe a
maybe_left (k -> a -> Either b c
f k
k a
a)) Map k a
m
,(k -> a -> Maybe c) -> Map k a -> Map k c
forall k a b. Ord k => (k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey (\k :: k
k a :: a
a -> Either b c -> Maybe c
forall a b. Either a b -> Maybe b
maybe_right (k -> a -> Either b c
f k
k a
a)) Map k a
m)
maybe_left :: Either a b -> Maybe a
maybe_left :: Either a b -> Maybe a
maybe_left (Left a :: a
a) = a -> Maybe a
forall a. a -> Maybe a
Just a
a
maybe_left (Right _) = Maybe a
forall a. Maybe a
Nothing
maybe_right :: Either a b -> Maybe b
maybe_right :: Either a b -> Maybe b
maybe_right (Right b :: b
b) = b -> Maybe b
forall a. a -> Maybe a
Just b
b
maybe_right (Left _) = Maybe b
forall a. Maybe a
Nothing
fold :: (a -> b -> b) -> b -> Map k a -> b
fold :: (a -> b -> b) -> b -> Map k a -> b
fold f :: a -> b -> b
f z :: b
z (Map m :: IntMap (Some k a)
m) = (Some k a -> b -> b) -> b -> IntMap (Some k a) -> b
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr Some k a -> b -> b
forall k. Some k a -> b -> b
some_fold b
z IntMap (Some k a)
m
where some_fold :: Some k a -> b -> b
some_fold (Only _ x :: a
x) y :: b
y = a -> b -> b
f a
x b
y
some_fold (More t :: Map k a
t) y :: b
y = (a -> b -> b) -> b -> Map k a -> b
forall a b k. (a -> b -> b) -> b -> Map k a -> b
mfoldr a -> b -> b
f b
y Map k a
t
foldWithKey :: (k -> a -> b -> b) -> b -> Map k a -> b
foldWithKey :: (k -> a -> b -> b) -> b -> Map k a -> b
foldWithKey f :: k -> a -> b -> b
f z :: b
z (Map m :: IntMap (Some k a)
m) = (Some k a -> b -> b) -> b -> IntMap (Some k a) -> b
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr Some k a -> b -> b
some_fold_with_key b
z IntMap (Some k a)
m
where some_fold_with_key :: Some k a -> b -> b
some_fold_with_key (Only k :: k
k x :: a
x) y :: b
y = k -> a -> b -> b
f k
k a
x b
y
some_fold_with_key (More t :: Map k a
t) y :: b
y = (k -> a -> b -> b) -> b -> Map k a -> b
forall k a b. (k -> a -> b -> b) -> b -> Map k a -> b
M.foldrWithKey k -> a -> b -> b
f b
y Map k a
t
mfoldr :: (a -> b -> b) -> b -> M.Map k a -> b
ifoldr :: (a -> b -> b) -> b -> I.IntMap a -> b
#if MIN_VERSION_containers(0,5,0)
mfoldr :: (a -> b -> b) -> b -> Map k a -> b
mfoldr = (a -> b -> b) -> b -> Map k a -> b
forall a b k. (a -> b -> b) -> b -> Map k a -> b
M.foldr
ifoldr :: (a -> b -> b) -> b -> IntMap a -> b
ifoldr = (a -> b -> b) -> b -> IntMap a -> b
forall a b. (a -> b -> b) -> b -> IntMap a -> b
I.foldr
#else
mfoldr = M.fold
ifoldr = I.fold
#endif
elems :: Map k a -> [a]
elems :: Map k a -> [a]
elems (Map m :: IntMap (Some k a)
m) = (Some k a -> [a] -> [a]) -> [a] -> IntMap (Some k a) -> [a]
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr Some k a -> [a] -> [a]
forall k a. Some k a -> [a] -> [a]
some_append_elems [] IntMap (Some k a)
m
where some_append_elems :: Some k a -> [a] -> [a]
some_append_elems (Only _ x :: a
x) acc :: [a]
acc = a
x a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
acc
some_append_elems (More t :: Map k a
t) acc :: [a]
acc = Map k a -> [a]
forall k a. Map k a -> [a]
M.elems Map k a
t [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
acc
keys :: Map k a -> [k]
keys :: Map k a -> [k]
keys (Map m :: IntMap (Some k a)
m) = (Some k a -> [k] -> [k]) -> [k] -> IntMap (Some k a) -> [k]
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr Some k a -> [k] -> [k]
forall a a. Some a a -> [a] -> [a]
some_append_keys [] IntMap (Some k a)
m
where some_append_keys :: Some a a -> [a] -> [a]
some_append_keys (Only k :: a
k _) acc :: [a]
acc = a
k a -> [a] -> [a]
forall a. a -> [a] -> [a]
: [a]
acc
some_append_keys (More t :: Map a a
t) acc :: [a]
acc = Map a a -> [a]
forall k a. Map k a -> [k]
M.keys Map a a
t [a] -> [a] -> [a]
forall a. [a] -> [a] -> [a]
++ [a]
acc
keysSet :: Ord k => Map k a -> S.Set k
keysSet :: Map k a -> Set k
keysSet (Map m :: IntMap (Some k a)
m) = (Some k a -> Set k -> Set k) -> Set k -> IntMap (Some k a) -> Set k
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr (Set k -> Set k -> Set k
forall a. Ord a => Set a -> Set a -> Set a
S.union (Set k -> Set k -> Set k)
-> (Some k a -> Set k) -> Some k a -> Set k -> Set k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Some k a -> Set k
forall k a. Some k a -> Set k
some_keys_set) Set k
forall a. Set a
S.empty IntMap (Some k a)
m
where some_keys_set :: Some k a -> Set k
some_keys_set (Only k :: k
k _) = k -> Set k
forall a. a -> Set a
S.singleton k
k
some_keys_set (More t :: Map k a
t) = Map k a -> Set k
forall k a. Map k a -> Set k
M.keysSet Map k a
t
assocs :: Map k a -> [(k,a)]
assocs :: Map k a -> [(k, a)]
assocs = Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
toList
toList :: Map k a -> [(k,a)]
toList :: Map k a -> [(k, a)]
toList (Map m :: IntMap (Some k a)
m) =
(Some k a -> [(k, a)] -> [(k, a)])
-> [(k, a)] -> IntMap (Some k a) -> [(k, a)]
forall a b. (a -> b -> b) -> b -> IntMap a -> b
ifoldr Some k a -> [(k, a)] -> [(k, a)]
forall k a. Some k a -> [(k, a)] -> [(k, a)]
some_append [] IntMap (Some k a)
m
where some_append :: Some k a -> [(k, a)] -> [(k, a)]
some_append (Only k :: k
k x :: a
x) acc :: [(k, a)]
acc = (k
k, a
x) (k, a) -> [(k, a)] -> [(k, a)]
forall a. a -> [a] -> [a]
: [(k, a)]
acc
some_append (More t :: Map k a
t) acc :: [(k, a)]
acc = Map k a -> [(k, a)]
forall k a. Map k a -> [(k, a)]
M.toList Map k a
t [(k, a)] -> [(k, a)] -> [(k, a)]
forall a. [a] -> [a] -> [a]
++ [(k, a)]
acc
fromList :: (Hashable k, Ord k)
=> [(k,a)] -> Map k a
fromList :: [(k, a)] -> Map k a
fromList xs :: [(k, a)]
xs = (Map k a -> (k, a) -> Map k a) -> Map k a -> [(k, a)] -> Map k a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\m :: Map k a
m (k :: k
k, x :: a
x) -> k -> a -> Map k a -> Map k a
forall k a. (Hashable k, Ord k) => k -> a -> Map k a -> Map k a
insert k
k a
x Map k a
m) Map k a
forall k a. Map k a
empty [(k, a)]
xs
fromListWith :: (Hashable k, Ord k) => (a -> a -> a) -> [(k,a)] -> Map k a
fromListWith :: (a -> a -> a) -> [(k, a)] -> Map k a
fromListWith f :: a -> a -> a
f xs :: [(k, a)]
xs = (Map k a -> (k, a) -> Map k a) -> Map k a -> [(k, a)] -> Map k a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\m :: Map k a
m (k :: k
k, x :: a
x) -> (a -> a -> a) -> k -> a -> Map k a -> Map k a
forall k a.
(Hashable k, Ord k) =>
(a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWith a -> a -> a
f k
k a
x Map k a
m) Map k a
forall k a. Map k a
empty [(k, a)]
xs
fromListWithKey :: (Hashable k, Ord k) => (k -> a -> a -> a) -> [(k,a)] -> Map k a
fromListWithKey :: (k -> a -> a -> a) -> [(k, a)] -> Map k a
fromListWithKey f :: k -> a -> a -> a
f xs :: [(k, a)]
xs = (Map k a -> (k, a) -> Map k a) -> Map k a -> [(k, a)] -> Map k a
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl' (\m :: Map k a
m (k :: k
k, x :: a
x) -> (k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
forall k a.
(Hashable k, Ord k) =>
(k -> a -> a -> a) -> k -> a -> Map k a -> Map k a
insertWithKey k -> a -> a -> a
f k
k a
x Map k a
m) Map k a
forall k a. Map k a
empty [(k, a)]
xs