{-# LANGUAGE CPP #-}
{-# LANGUAGE UndecidableInstances #-}
module Data.Map.Common.Refined where
import Control.Monad.Reader
import Control.DeepSeq
import Data.Coerce
import Data.Constraint (Dict(..))
import Data.Container.Refined.Proofs
import Data.Container.Refined.Unsafe
import Data.Distributive
import Data.Foldable.WithIndex
import Data.Functor.Rep
import Data.Functor.WithIndex
import qualified Data.Hashable as Hashable
import qualified Data.Map as Map
import Data.Proxy
import Data.Reflection
import Data.Traversable.WithIndex
import Data.Type.Coercion
import Data.Type.Equality ((:~:)(..))
import Refined
import Refined.Unsafe
import Unsafe.Coerce
#if MIN_VERSION_containers(0, 6, 2)
#elif MIN_VERSION_containers(0, 5, 8)
import Data.Functor.Const (Const(..))
import Data.Monoid (Any(..))
import qualified Data.Map.Merge.Lazy as Map
#else
import qualified Data.List as List
import qualified Data.Map.Strict as MapStrict
#endif
newtype Map s k a = Map (Map.Map k a)
deriving newtype (Map s k a -> Map s k a -> Bool
forall a. (a -> a -> Bool) -> (a -> a -> Bool) -> Eq a
forall s k a. (Eq k, Eq a) => Map s k a -> Map s k a -> Bool
/= :: Map s k a -> Map s k a -> Bool
$c/= :: forall s k a. (Eq k, Eq a) => Map s k a -> Map s k a -> Bool
== :: Map s k a -> Map s k a -> Bool
$c== :: forall s k a. (Eq k, Eq a) => Map s k a -> Map s k a -> Bool
Eq, Map s k a -> Map s k a -> Bool
Map s k a -> Map s k a -> Ordering
Map s k a -> Map s k a -> Map s k 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 {s} {k} {a}. (Ord k, Ord a) => Eq (Map s k a)
forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Bool
forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Ordering
forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Map s k a
min :: Map s k a -> Map s k a -> Map s k a
$cmin :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Map s k a
max :: Map s k a -> Map s k a -> Map s k a
$cmax :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Map s k a
>= :: Map s k a -> Map s k a -> Bool
$c>= :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Bool
> :: Map s k a -> Map s k a -> Bool
$c> :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Bool
<= :: Map s k a -> Map s k a -> Bool
$c<= :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Bool
< :: Map s k a -> Map s k a -> Bool
$c< :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Bool
compare :: Map s k a -> Map s k a -> Ordering
$ccompare :: forall s k a. (Ord k, Ord a) => Map s k a -> Map s k a -> Ordering
Ord, Int -> Map s k a -> ShowS
[Map s k a] -> ShowS
Map s k a -> String
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall s k a. (Show k, Show a) => Int -> Map s k a -> ShowS
forall s k a. (Show k, Show a) => [Map s k a] -> ShowS
forall s k a. (Show k, Show a) => Map s k a -> String
showList :: [Map s k a] -> ShowS
$cshowList :: forall s k a. (Show k, Show a) => [Map s k a] -> ShowS
show :: Map s k a -> String
$cshow :: forall s k a. (Show k, Show a) => Map s k a -> String
showsPrec :: Int -> Map s k a -> ShowS
$cshowsPrec :: forall s k a. (Show k, Show a) => Int -> Map s k a -> ShowS
Show, forall a b. a -> Map s k b -> Map s k a
forall a b. (a -> b) -> Map s k a -> Map s k b
forall s k a b. a -> Map s k b -> Map s k a
forall s k a b. (a -> b) -> Map s k a -> Map s k b
forall (f :: * -> *).
(forall a b. (a -> b) -> f a -> f b)
-> (forall a b. a -> f b -> f a) -> Functor f
<$ :: forall a b. a -> Map s k b -> Map s k a
$c<$ :: forall s k a b. a -> Map s k b -> Map s k a
fmap :: forall a b. (a -> b) -> Map s k a -> Map s k b
$cfmap :: forall s k a b. (a -> b) -> Map s k a -> Map s k b
Functor, forall a. Eq a => a -> Map s k a -> Bool
forall a. Num a => Map s k a -> a
forall a. Ord a => Map s k a -> a
forall m. Monoid m => Map s k m -> m
forall a. Map s k a -> Bool
forall a. Map s k a -> Int
forall a. Map s k a -> [a]
forall a. (a -> a -> a) -> Map s k a -> a
forall m a. Monoid m => (a -> m) -> Map s k a -> m
forall b a. (b -> a -> b) -> b -> Map s k a -> b
forall a b. (a -> b -> b) -> b -> Map s k a -> b
forall s k a. Eq a => a -> Map s k a -> Bool
forall s k a. Num a => Map s k a -> a
forall s k a. Ord a => Map s k a -> a
forall s k m. Monoid m => Map s k m -> m
forall s k a. Map s k a -> Bool
forall s k a. Map s k a -> Int
forall s k a. Map s k a -> [a]
forall s k a. (a -> a -> a) -> Map s k a -> a
forall s k m a. Monoid m => (a -> m) -> Map s k a -> m
forall s k b a. (b -> a -> b) -> b -> Map s k a -> b
forall s k a b. (a -> b -> b) -> b -> Map s k a -> b
forall (t :: * -> *).
(forall m. Monoid m => t m -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall m a. Monoid m => (a -> m) -> t a -> m)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall a b. (a -> b -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall b a. (b -> a -> b) -> b -> t a -> b)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. (a -> a -> a) -> t a -> a)
-> (forall a. t a -> [a])
-> (forall a. t a -> Bool)
-> (forall a. t a -> Int)
-> (forall a. Eq a => a -> t a -> Bool)
-> (forall a. Ord a => t a -> a)
-> (forall a. Ord a => t a -> a)
-> (forall a. Num a => t a -> a)
-> (forall a. Num a => t a -> a)
-> Foldable t
product :: forall a. Num a => Map s k a -> a
$cproduct :: forall s k a. Num a => Map s k a -> a
sum :: forall a. Num a => Map s k a -> a
$csum :: forall s k a. Num a => Map s k a -> a
minimum :: forall a. Ord a => Map s k a -> a
$cminimum :: forall s k a. Ord a => Map s k a -> a
maximum :: forall a. Ord a => Map s k a -> a
$cmaximum :: forall s k a. Ord a => Map s k a -> a
elem :: forall a. Eq a => a -> Map s k a -> Bool
$celem :: forall s k a. Eq a => a -> Map s k a -> Bool
length :: forall a. Map s k a -> Int
$clength :: forall s k a. Map s k a -> Int
null :: forall a. Map s k a -> Bool
$cnull :: forall s k a. Map s k a -> Bool
toList :: forall a. Map s k a -> [a]
$ctoList :: forall s k a. Map s k a -> [a]
foldl1 :: forall a. (a -> a -> a) -> Map s k a -> a
$cfoldl1 :: forall s k a. (a -> a -> a) -> Map s k a -> a
foldr1 :: forall a. (a -> a -> a) -> Map s k a -> a
$cfoldr1 :: forall s k a. (a -> a -> a) -> Map s k a -> a
foldl' :: forall b a. (b -> a -> b) -> b -> Map s k a -> b
$cfoldl' :: forall s k b a. (b -> a -> b) -> b -> Map s k a -> b
foldl :: forall b a. (b -> a -> b) -> b -> Map s k a -> b
$cfoldl :: forall s k b a. (b -> a -> b) -> b -> Map s k a -> b
foldr' :: forall a b. (a -> b -> b) -> b -> Map s k a -> b
$cfoldr' :: forall s k a b. (a -> b -> b) -> b -> Map s k a -> b
foldr :: forall a b. (a -> b -> b) -> b -> Map s k a -> b
$cfoldr :: forall s k a b. (a -> b -> b) -> b -> Map s k a -> b
foldMap' :: forall m a. Monoid m => (a -> m) -> Map s k a -> m
$cfoldMap' :: forall s k m a. Monoid m => (a -> m) -> Map s k a -> m
foldMap :: forall m a. Monoid m => (a -> m) -> Map s k a -> m
$cfoldMap :: forall s k m a. Monoid m => (a -> m) -> Map s k a -> m
fold :: forall m. Monoid m => Map s k m -> m
$cfold :: forall s k m. Monoid m => Map s k m -> m
Foldable, Map s k a -> ()
forall a. (a -> ()) -> NFData a
forall s k a. (NFData k, NFData a) => Map s k a -> ()
rnf :: Map s k a -> ()
$crnf :: forall s k a. (NFData k, NFData a) => Map s k a -> ()
NFData)
#if MIN_VERSION_hashable(1, 3, 4)
deriving newtype (Int -> Map s k a -> Int
Map s k a -> Int
forall a. Eq a -> (Int -> a -> Int) -> (a -> Int) -> Hashable a
forall {s} {k} {a}. (Hashable k, Hashable a) => Eq (Map s k a)
forall s k a. (Hashable k, Hashable a) => Int -> Map s k a -> Int
forall s k a. (Hashable k, Hashable a) => Map s k a -> Int
hash :: Map s k a -> Int
$chash :: forall s k a. (Hashable k, Hashable a) => Map s k a -> Int
hashWithSalt :: Int -> Map s k a -> Int
$chashWithSalt :: forall s k a. (Hashable k, Hashable a) => Int -> Map s k a -> Int
Hashable.Hashable)
#endif
deriving stock (forall s k. Functor (Map s k)
forall s k. Foldable (Map s k)
forall s k (m :: * -> *) a.
Monad m =>
Map s k (m a) -> m (Map s k a)
forall s k (f :: * -> *) a.
Applicative f =>
Map s k (f a) -> f (Map s k a)
forall s k (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Map s k a -> m (Map s k b)
forall s k (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map s k a -> f (Map s k b)
forall (t :: * -> *).
Functor t
-> Foldable t
-> (forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> t a -> f (t b))
-> (forall (f :: * -> *) a. Applicative f => t (f a) -> f (t a))
-> (forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> t a -> m (t b))
-> (forall (m :: * -> *) a. Monad m => t (m a) -> m (t a))
-> Traversable t
forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map s k a -> f (Map s k b)
sequence :: forall (m :: * -> *) a. Monad m => Map s k (m a) -> m (Map s k a)
$csequence :: forall s k (m :: * -> *) a.
Monad m =>
Map s k (m a) -> m (Map s k a)
mapM :: forall (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Map s k a -> m (Map s k b)
$cmapM :: forall s k (m :: * -> *) a b.
Monad m =>
(a -> m b) -> Map s k a -> m (Map s k b)
sequenceA :: forall (f :: * -> *) a.
Applicative f =>
Map s k (f a) -> f (Map s k a)
$csequenceA :: forall s k (f :: * -> *) a.
Applicative f =>
Map s k (f a) -> f (Map s k a)
traverse :: forall (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map s k a -> f (Map s k b)
$ctraverse :: forall s k (f :: * -> *) a b.
Applicative f =>
(a -> f b) -> Map s k a -> f (Map s k b)
Traversable)
type role Map nominal nominal representational
toMap :: forall s k a. Map s k a -> Map.Map k a
toMap :: forall s k a. Map s k a -> Map k a
toMap (Map Map k a
m) = Map k a
m
type Key s = Refined (InSet 'Regular s)
unsafeCastKey :: forall s k. Coercion k (Key s k)
unsafeCastKey :: forall s k. Coercion k (Key s k)
unsafeCastKey = forall {k} x (p :: k). Coercion x (Refined p x)
reallyUnsafeUnderlyingRefined
unsafeKey :: k -> Key s k
unsafeKey :: forall k s. k -> Key s k
unsafeKey = forall a b. Coercion a b -> a -> b
coerceWith forall s k. Coercion k (Key s k)
unsafeCastKey
data SomeMap k a where
SomeMap :: forall s k a. !(Map s k a) -> SomeMap k a
withMap :: forall k a r. SomeMap k a -> (forall s. Map s k a -> r) -> r
withMap :: forall k a r. SomeMap k a -> (forall s. Map s k a -> r) -> r
withMap (SomeMap Map s k a
m) forall s. Map s k a -> r
k = forall s. Map s k a -> r
k Map s k a
m
fromMap :: forall k a. Map.Map k a -> SomeMap k a
fromMap :: forall k a. Map k a -> SomeMap k a
fromMap Map k a
m = forall s k a. Map s k a -> SomeMap k a
SomeMap (forall s k a. Map k a -> Map s k a
Map Map k a
m)
data SomeMapWith p k a where
SomeMapWith :: forall s k a p. !(Map s k a) -> !(p s) -> SomeMapWith p k a
withMapWith
:: forall k a r p. SomeMapWith p k a -> (forall s. Map s k a -> p s -> r) -> r
withMapWith :: forall k a r (p :: * -> *).
SomeMapWith p k a -> (forall s. Map s k a -> p s -> r) -> r
withMapWith (SomeMapWith Map s k a
m p s
p) forall s. Map s k a -> p s -> r
k = forall s. Map s k a -> p s -> r
k Map s k a
m p s
p
data Some2MapWith p k a b where
Some2MapWith
:: forall s t k a b p. !(Map s k a)
-> !(Map t k b)
-> !(p s t)
-> Some2MapWith p k a b
with2MapWith
:: forall k a b r p. Some2MapWith p k a b
-> (forall s t. Map s k a -> Map t k b -> p s t -> r)
-> r
with2MapWith :: forall k a b r (p :: * -> * -> *).
Some2MapWith p k a b
-> (forall s t. Map s k a -> Map t k b -> p s t -> r) -> r
with2MapWith (Some2MapWith Map s k a
m1 Map t k b
m2 p s t
p) forall s t. Map s k a -> Map t k b -> p s t -> r
k = forall s t. Map s k a -> Map t k b -> p s t -> r
k Map s k a
m1 Map t k b
m2 p s t
p
empty :: forall k a. SomeMapWith (EmptyProof 'Regular) k a
empty :: forall k a. SomeMapWith (EmptyProof 'Regular) k a
empty = forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map forall k a. Map k a
Map.empty) forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) r.
(forall s. InSet f r :-> InSet f s) -> EmptyProof f r
EmptyProof forall p q. p :-> q
unsafeSubset
fromSet :: forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet :: forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet Key s k -> a
f = forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a. (k -> a) -> Set k -> Map k a
Map.fromSet (Key s k -> a
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k s. k -> Key s k
unsafeKey) (forall {k} (s :: k) a (proxy :: k -> *).
Reifies s a =>
proxy s -> a
reflect forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @s)
delete
:: forall s k a. Ord k
=> k -> Map s k a -> SomeMapWith (SupersetProof 'Regular s) k a
delete :: forall s k a.
Ord k =>
k -> Map s k a -> SomeMapWith (SupersetProof 'Regular s) k a
delete k
k (Map Map k a
m) = forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a. Ord k => k -> Map k a -> Map k a
Map.delete k
k Map k a
m)
forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(InSet f r :-> InSet f s) -> SupersetProof f s r
SupersetProof forall p q. p :-> q
unsafeSubset
lookup :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookup :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookup k
k (Map Map k a
m) = (forall k s. k -> Key s k
unsafeKey k
k,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup k
k Map k a
m
(!) :: forall s k a. Ord k => Map s k a -> Key s k -> a
! :: forall s k a. Ord k => Map s k a -> Key s k -> a
(!) (Map Map k a
m) Key s k
k = case forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (forall {k} (p :: k) x. Refined p x -> x
unrefine Key s k
k) Map k a
m of
Maybe a
Nothing -> forall a. HasCallStack => String -> a
error String
"(!): bug: Data.Map.Refined has been subverted"
Just a
x -> a
x
member :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k)
member :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k)
member k
k (Map Map k a
m)
| k
k forall k a. Ord k => k -> Map k a -> Bool
`Map.member` Map k a
m = forall a. a -> Maybe a
Just (forall k s. k -> Key s k
unsafeKey k
k)
| Bool
otherwise = forall a. Maybe a
Nothing
lookupLT :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupLT :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupLT = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k v. Ord k => k -> Map k v -> Maybe (k, v)
Map.lookupLT @k @a
lookupGT :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupGT :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupGT = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k v. Ord k => k -> Map k v -> Maybe (k, v)
Map.lookupGT @k @a
lookupLE :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupLE :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupLE = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k v. Ord k => k -> Map k v -> Maybe (k, v)
Map.lookupLE @k @a
lookupGE :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupGE :: forall s k a. Ord k => k -> Map s k a -> Maybe (Key s k, a)
lookupGE = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k v. Ord k => k -> Map k v -> Maybe (k, v)
Map.lookupGE @k @a
null :: forall s k a. Map s k a -> Maybe (EmptyProof 'Regular s)
null :: forall s k a. Map s k a -> Maybe (EmptyProof 'Regular s)
null (Map Map k a
m)
| forall k a. Map k a -> Bool
Map.null Map k a
m = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) r.
(forall s. InSet f r :-> InSet f s) -> EmptyProof f r
EmptyProof forall p q. p :-> q
unsafeSubset
| Bool
otherwise = forall a. Maybe a
Nothing
isSubmapOfBy
:: forall s t k a b. Ord k
=> (a -> b -> Bool)
-> Map s k a
-> Map t k b
-> Maybe (SubsetProof 'Regular s t)
isSubmapOfBy :: forall s t k a b.
Ord k =>
(a -> b -> Bool)
-> Map s k a -> Map t k b -> Maybe (SubsetProof 'Regular s t)
isSubmapOfBy a -> b -> Bool
f (Map Map k a
m1) (Map Map k b
m2)
| forall k a b.
Ord k =>
(a -> b -> Bool) -> Map k a -> Map k b -> Bool
Map.isSubmapOfBy a -> b -> Bool
f Map k a
m1 Map k b
m2 = forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(InSet f s :-> InSet f r) -> SubsetProof f s r
SubsetProof forall p q. p :-> q
unsafeSubset
| Bool
otherwise = forall a. Maybe a
Nothing
disjoint
:: forall s t k a b. Ord k
=> Map s k a -> Map t k b -> Maybe (DisjointProof 'Regular s t)
disjoint :: forall s t k a b.
Ord k =>
Map s k a -> Map t k b -> Maybe (DisjointProof 'Regular s t)
disjoint (Map Map k a
m1) (Map Map k b
m2)
#if MIN_VERSION_containers(0, 6, 2)
| forall k a b. Ord k => Map k a -> Map k b -> Bool
Map.disjoint Map k a
m1 Map k b
m2
#elif MIN_VERSION_containers(0, 5, 8)
| Const (Any False) <- Map.mergeA
(Map.traverseMissing \_ _ -> Const mempty)
(Map.traverseMissing \_ _ -> Const mempty)
(Map.zipWithAMatched \_ _ _ -> Const $ Any True)
m1
m2
#else
| Map.null $ MapStrict.intersectionWith (\_ _ -> ()) m1 m2
#endif
= forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(forall t.
(InSet f t :-> InSet f s)
-> (InSet f t :-> InSet f r) -> forall u. InSet f t :-> InSet f u)
-> DisjointProof f s r
DisjointProof \InSet 'Regular t :-> InSet 'Regular s
f InSet 'Regular t :-> InSet 'Regular t
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular t :-> InSet 'Regular s
f InSet 'Regular t :-> InSet 'Regular t
g
| Bool
otherwise = forall a. Maybe a
Nothing
zipWithKey
:: forall s k a b c. Ord k
=> (Key s k -> a -> b -> c) -> Map s k a -> Map s k b -> Map s k c
zipWithKey :: forall s k a b c.
Ord k =>
(Key s k -> a -> b -> c) -> Map s k a -> Map s k b -> Map s k c
zipWithKey Key s k -> a -> b -> c
f (Map Map k a
m1) (Map Map k b
m2) = forall s k a. Map k a -> Map s k a
Map
forall a b. (a -> b) -> a -> b
$ forall k a b c.
Ord k =>
(k -> a -> b -> Maybe c)
-> (Map k a -> Map k c)
-> (Map k b -> Map k c)
-> Map k a
-> Map k b
-> Map k c
Map.mergeWithKey (\k
k a
x b
y -> forall a. a -> Maybe a
Just forall a b. (a -> b) -> a -> b
$ Key s k -> a -> b -> c
f (forall k s. k -> Key s k
unsafeKey k
k) a
x b
y)
(\Map k a
m -> if forall k a. Map k a -> Bool
Map.null Map k a
m
then forall k a. Map k a
Map.empty
else forall a. HasCallStack => String -> a
error String
"zipWithKey: bug: Data.Map.Refined has been subverted")
(\Map k b
m -> if forall k a. Map k a -> Bool
Map.null Map k b
m
then forall k a. Map k a
Map.empty
else forall a. HasCallStack => String -> a
error String
"zipWithKey: bug: Data.Map.Refined has been subverted")
Map k a
m1
Map k b
m2
difference
:: forall s t k a b. Ord k
=> Map s k a -> Map t k b -> SomeMapWith (DifferenceProof 'Regular s t) k a
difference :: forall s t k a b.
Ord k =>
Map s k a
-> Map t k b -> SomeMapWith (DifferenceProof 'Regular s t) k a
difference (Map Map k a
m1) (Map Map k b
m2) = forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a b. Ord k => Map k a -> Map k b -> Map k a
Map.difference Map k a
m1 Map k b
m2)
forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s t r.
(InSet f r :-> InSet f s)
-> (forall u.
(InSet f u :-> InSet f r)
-> (InSet f u :-> InSet f t) -> forall v. InSet f u :-> InSet f v)
-> (InSet f s :-> (InSet f t || InSet f r))
-> DifferenceProof f s t r
DifferenceProof forall p q. p :-> q
unsafeSubset (\InSet 'Regular u :-> InSet 'Regular Any
f InSet 'Regular u :-> InSet 'Regular t
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular u :-> InSet 'Regular Any
f InSet 'Regular u :-> InSet 'Regular t
g) forall p q. p :-> q
unsafeSubset
mapWithKey :: forall s k a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
mapWithKey :: forall s k a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
mapWithKey = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall k a b. (k -> a -> b) -> Map k a -> Map k b
Map.mapWithKey @k @a @b
traverseWithKey
:: forall s f k a b. Applicative f
=> (Key s k -> a -> f b) -> Map s k a -> f (Map s k b)
traverseWithKey :: forall s (f :: * -> *) k a b.
Applicative f =>
(Key s k -> a -> f b) -> Map s k a -> f (Map s k b)
traverseWithKey Key s k -> a -> f b
f (Map Map k a
m) = forall s k a. Map k a -> Map s k a
Map forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (t :: * -> *) k a b.
Applicative t =>
(k -> a -> t b) -> Map k a -> t (Map k b)
Map.traverseWithKey (Key s k -> a -> f b
f forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k s. k -> Key s k
unsafeKey) Map k a
m
foldMapWithKey
:: forall s k a m. Monoid m => (Key s k -> a -> m) -> Map s k a -> m
foldMapWithKey :: forall s k a m. Monoid m => (Key s k -> a -> m) -> Map s k a -> m
foldMapWithKey = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall m k a. Monoid m => (k -> a -> m) -> Map k a -> m
Map.foldMapWithKey @m @k @a
foldrWithKey :: forall s k a b. (Key s k -> a -> b -> b) -> b -> Map s k a -> b
foldrWithKey :: forall s k a b. (Key s k -> a -> b -> b) -> b -> Map s k a -> b
foldrWithKey = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall k a b. (k -> a -> b -> b) -> b -> Map k a -> b
Map.foldrWithKey @k @a @b
foldlWithKey :: forall s k a b. (b -> Key s k -> a -> b) -> b -> Map s k a -> b
foldlWithKey :: forall s k a b. (b -> Key s k -> a -> b) -> b -> Map s k a -> b
foldlWithKey = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall a k b. (a -> k -> b -> a) -> a -> Map k b -> a
Map.foldlWithKey @b @k @a
foldrWithKey' :: forall s k a b. (Key s k -> a -> b -> b) -> b -> Map s k a -> b
foldrWithKey' :: forall s k a b. (Key s k -> a -> b -> b) -> b -> Map s k a -> b
foldrWithKey' = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall k a b. (k -> a -> b -> b) -> b -> Map k a -> b
Map.foldrWithKey' @k @a @b
foldlWithKey' :: forall s k a b. (b -> Key s k -> a -> b) -> b -> Map s k a -> b
foldlWithKey' :: forall s k a b. (b -> Key s k -> a -> b) -> b -> Map s k a -> b
foldlWithKey' = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce
forall a b. (a -> b) -> a -> b
$ forall a k b. (a -> k -> b -> a) -> a -> Map k b -> a
Map.foldlWithKey' @b @k @a
keysSet :: forall s k a. Map s k a -> Set s k
keysSet :: forall s k a. Map s k a -> Set s k
keysSet (Map Map k a
m) = forall a r. a -> (forall s. Reifies s a => Proxy s -> r) -> r
reify (forall k a. Map k a -> Set k
Map.keysSet Map k a
m)
\(Proxy s
_ :: Proxy s') -> case forall a b. a -> b
unsafeCoerce forall {k} (a :: k). a :~: a
Refl :: s :~: s' of
s :~: s
Refl -> forall (a :: Constraint). a => Dict a
Dict
toList :: forall s k a. Map s k a -> [(Key s k, a)]
toList :: forall s k a. Map s k a -> [(Key s k, a)]
toList = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k a. Map k a -> [(k, a)]
Map.toAscList @k @a
toDescList :: forall s k a. Map s k a -> [(Key s k, a)]
toDescList :: forall s k a. Map s k a -> [(Key s k, a)]
toDescList = forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce forall a b. (a -> b) -> a -> b
$ forall k a. Map k a -> [(k, a)]
Map.toDescList @k @a
filterWithKey
:: forall s k a. (Key s k -> a -> Bool)
-> Map s k a
-> SomeMapWith (SupersetProof 'Regular s) k a
filterWithKey :: forall s k a.
(Key s k -> a -> Bool)
-> Map s k a -> SomeMapWith (SupersetProof 'Regular s) k a
filterWithKey Key s k -> a -> Bool
p (Map Map k a
m)
= forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a. (k -> a -> Bool) -> Map k a -> Map k a
Map.filterWithKey (Key s k -> a -> Bool
p forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k s. k -> Key s k
unsafeKey) Map k a
m)
forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(InSet f r :-> InSet f s) -> SupersetProof f s r
SupersetProof forall p q. p :-> q
unsafeSubset
restrictKeys
:: forall s t k a. (Ord k, KnownSet t k)
=> Map s k a -> SomeMapWith (IntersectionProof 'Regular s t) k a
restrictKeys :: forall s t k a.
(Ord k, KnownSet t k) =>
Map s k a -> SomeMapWith (IntersectionProof 'Regular s t) k a
restrictKeys (Map Map k a
m) = forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith
#if MIN_VERSION_containers(0, 5, 8)
(forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a. Ord k => Map k a -> Set k -> Map k a
Map.restrictKeys Map k a
m forall a b. (a -> b) -> a -> b
$ forall {k} (s :: k) a (proxy :: k -> *).
Reifies s a =>
proxy s -> a
reflect forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @t)
#else
(Map $ Map.intersectionWith const m $ Map.fromSet id $ reflect $ Proxy @t)
#endif
forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s t r.
(InSet f r :-> (InSet f s && InSet f t))
-> (forall u.
(InSet f u :-> InSet f s)
-> (InSet f u :-> InSet f t) -> InSet f u :-> InSet f r)
-> IntersectionProof f s t r
IntersectionProof forall p q. p :-> q
unsafeSubset forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2
withoutKeys
:: forall s t k a. (Ord k, KnownSet t k)
=> Map s k a -> SomeMapWith (DifferenceProof 'Regular s t) k a
withoutKeys :: forall s t k a.
(Ord k, KnownSet t k) =>
Map s k a -> SomeMapWith (DifferenceProof 'Regular s t) k a
withoutKeys (Map Map k a
m) = forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith
#if MIN_VERSION_containers(0, 5, 8)
(forall s k a. Map k a -> Map s k a
Map forall a b. (a -> b) -> a -> b
$ forall k a. Ord k => Map k a -> Set k -> Map k a
Map.withoutKeys Map k a
m forall a b. (a -> b) -> a -> b
$ forall {k} (s :: k) a (proxy :: k -> *).
Reifies s a =>
proxy s -> a
reflect forall a b. (a -> b) -> a -> b
$ forall {k} (t :: k). Proxy t
Proxy @t)
#else
(Map $ Map.difference m $ Map.fromSet id $ reflect $ Proxy @t)
#endif
forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s t r.
(InSet f r :-> InSet f s)
-> (forall u.
(InSet f u :-> InSet f r)
-> (InSet f u :-> InSet f t) -> forall v. InSet f u :-> InSet f v)
-> (InSet f s :-> (InSet f t || InSet f r))
-> DifferenceProof f s t r
DifferenceProof forall p q. p :-> q
unsafeSubset (\InSet 'Regular u :-> InSet 'Regular Any
f InSet 'Regular u :-> InSet 'Regular t
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular u :-> InSet 'Regular Any
f InSet 'Regular u :-> InSet 'Regular t
g) forall p q. p :-> q
unsafeSubset
partitionWithKey
:: forall s k a. Ord k
=> (Key s k -> a -> Bool)
-> Map s k a
-> Some2MapWith (PartitionProof 'Regular s k) k a a
partitionWithKey :: forall s k a.
Ord k =>
(Key s k -> a -> Bool)
-> Map s k a -> Some2MapWith (PartitionProof 'Regular s k) k a a
partitionWithKey Key s k -> a -> Bool
p (Map Map k a
m) = case forall k a. (k -> a -> Bool) -> Map k a -> (Map k a, Map k a)
Map.partitionWithKey (Key s k -> a -> Bool
p forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k s. k -> Key s k
unsafeKey) Map k a
m of
(Map k a
m1, Map k a
m2) -> forall s t k a b (p :: * -> * -> *).
Map s k a -> Map t k b -> p s t -> Some2MapWith p k a b
Some2MapWith (forall s k a. Map k a -> Map s k a
Map Map k a
m1) (forall s k a. Map k a -> Map s k a
Map Map k a
m2) forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s a r q.
(Refined (InSet f s) a
-> Either (Refined (InSet f r) a) (Refined (InSet f q) a))
-> ((InSet f r || InSet f q) :-> InSet f s)
-> (forall t.
(InSet f r :-> InSet f t)
-> (InSet f q :-> InSet f t) -> InSet f s :-> InSet f t)
-> (forall t.
(InSet f t :-> InSet f r)
-> (InSet f t :-> InSet f q) -> forall u. InSet f t :-> InSet f u)
-> PartitionProof f s a r q
PartitionProof
do \Key s k
k -> case forall k a. Ord k => k -> Map k a -> Maybe a
Map.lookup (forall {k} (p :: k) x. Refined p x -> x
unrefine Key s k
k) Map k a
m of
Maybe a
Nothing
-> forall a. HasCallStack => String -> a
error String
"partitionWithKey: bug: Data.Map.Refined has been subverted"
Just a
x -> if Key s k -> a -> Bool
p Key s k
k a
x
then forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall k s. k -> Key s k
unsafeKey forall a b. (a -> b) -> a -> b
$ forall {k} (p :: k) x. Refined p x -> x
unrefine Key s k
k
else forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ forall k s. k -> Key s k
unsafeKey forall a b. (a -> b) -> a -> b
$ forall {k} (p :: k) x. Refined p x -> x
unrefine Key s k
k
forall p q. p :-> q
unsafeSubset forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 \InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g
spanAntitone
:: forall s k a. (Key s k -> Bool)
-> Map s k a
-> Some2MapWith (PartialPartitionProof 'Regular s) k a a
spanAntitone :: forall s k a.
(Key s k -> Bool)
-> Map s k a
-> Some2MapWith (PartialPartitionProof 'Regular s) k a a
spanAntitone Key s k -> Bool
p (Map Map k a
m) =
#if MIN_VERSION_containers(0, 5, 8)
case forall k a. (k -> Bool) -> Map k a -> (Map k a, Map k a)
Map.spanAntitone (Key s k -> Bool
p forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall k s. k -> Key s k
unsafeKey) Map k a
m of
(Map k a
m1, Map k a
m2)
#else
case List.span (p . unsafeKey . fst) $ Map.toAscList m of
(xs1, xs2)
| let m1 = Map.fromDistinctAscList xs1
, let m2 = Map.fromDistinctAscList xs2
#endif
-> forall s t k a b (p :: * -> * -> *).
Map s k a -> Map t k b -> p s t -> Some2MapWith p k a b
Some2MapWith (forall s k a. Map k a -> Map s k a
Map Map k a
m1) (forall s k a. Map k a -> Map s k a
Map Map k a
m2) forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r q.
((InSet f r || InSet f q) :-> InSet f s)
-> (forall t.
(InSet f r :-> InSet f t)
-> (InSet f q :-> InSet f t) -> InSet f s :-> InSet f t)
-> (forall t.
(InSet f t :-> InSet f r)
-> (InSet f t :-> InSet f q) -> forall u. InSet f t :-> InSet f u)
-> PartialPartitionProof f s r q
PartialPartitionProof
forall p q. p :-> q
unsafeSubset forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 \InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g
splitLookup
:: forall s k a. Ord k
=> k -> Map s k a -> Some2MapWith (SplitProof 'Regular s (Key s k, a)) k a a
splitLookup :: forall s k a.
Ord k =>
k
-> Map s k a
-> Some2MapWith (SplitProof 'Regular s (Key s k, a)) k a a
splitLookup k
k (Map Map k a
m) = case forall k a. Ord k => k -> Map k a -> (Map k a, Maybe a, Map k a)
Map.splitLookup k
k Map k a
m of
(!Map k a
m1, Maybe a
v, !Map k a
m2) -> forall s t k a b (p :: * -> * -> *).
Map s k a -> Map t k b -> p s t -> Some2MapWith p k a b
Some2MapWith (forall s k a. Map k a -> Map s k a
Map Map k a
m1) (forall s k a. Map k a -> Map s k a
Map Map k a
m2) forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s e r q.
Maybe e
-> ((InSet f r || InSet f q) :-> InSet f s)
-> (forall t.
(InSet f t :-> InSet f r)
-> (InSet f t :-> InSet f q) -> forall u. InSet f t :-> InSet f u)
-> SplitProof f s e r q
SplitProof
((forall k s. k -> Key s k
unsafeKey k
k,) forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Maybe a
v) forall p q. p :-> q
unsafeSubset \InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g -> forall p' q' p'' q'' p q. (p' :-> q') -> (p'' :-> q'') -> p :-> q
unsafeSubsetWith2 InSet 'Regular t :-> InSet 'Regular Any
f InSet 'Regular t :-> InSet 'Regular Any
g
minViewWithKey
:: forall s k a. Map s k a
-> Either
(EmptyProof 'Regular s)
((Key s k, a), SomeMapWith (SupersetProof 'Regular s) k a)
minViewWithKey :: forall s k a.
Map s k a
-> Either
(EmptyProof 'Regular s)
((Key s k, a), SomeMapWith (SupersetProof 'Regular s) k a)
minViewWithKey (Map Map k a
m) = case forall k a. Map k a -> Maybe ((k, a), Map k a)
Map.minViewWithKey Map k a
m of
Maybe ((k, a), Map k a)
Nothing -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) r.
(forall s. InSet f r :-> InSet f s) -> EmptyProof f r
EmptyProof forall p q. p :-> q
unsafeSubset
Just ((k, a)
kv, Map k a
m') -> forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ (forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce (k, a)
kv,)
forall a b. (a -> b) -> a -> b
$ forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map Map k a
m') forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(InSet f r :-> InSet f s) -> SupersetProof f s r
SupersetProof forall p q. p :-> q
unsafeSubset
maxViewWithKey
:: forall s k a. Map s k a
-> Either
(EmptyProof 'Regular s)
((Key s k, a), SomeMapWith (SupersetProof 'Regular s) k a)
maxViewWithKey :: forall s k a.
Map s k a
-> Either
(EmptyProof 'Regular s)
((Key s k, a), SomeMapWith (SupersetProof 'Regular s) k a)
maxViewWithKey (Map Map k a
m) = case forall k a. Map k a -> Maybe ((k, a), Map k a)
Map.maxViewWithKey Map k a
m of
Maybe ((k, a), Map k a)
Nothing -> forall a b. a -> Either a b
Left forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) r.
(forall s. InSet f r :-> InSet f s) -> EmptyProof f r
EmptyProof forall p q. p :-> q
unsafeSubset
Just ((k, a)
kv, Map k a
m') -> forall a b. b -> Either a b
Right forall a b. (a -> b) -> a -> b
$ (forall {k} (a :: k) (b :: k) r.
Coercion a b -> (Coercible a b => r) -> r
gcoerceWith (forall s k. Coercion k (Key s k)
unsafeCastKey @s @k) forall a b. (a -> b) -> a -> b
$ coerce :: forall a b. Coercible a b => a -> b
coerce (k, a)
kv,)
forall a b. (a -> b) -> a -> b
$ forall s k a (p :: * -> *). Map s k a -> p s -> SomeMapWith p k a
SomeMapWith (forall s k a. Map k a -> Map s k a
Map Map k a
m') forall a b. (a -> b) -> a -> b
$ forall (f :: Flavor) s r.
(InSet f r :-> InSet f s) -> SupersetProof f s r
SupersetProof forall p q. p :-> q
unsafeSubset
castKey
:: forall s t k. (forall x. Key s x -> Key t x)
-> (forall x. Key t x -> Key s x)
-> Coercion (Key s k) (Key t k)
castKey :: forall s t k.
(forall x. Key s x -> Key t x)
-> (forall x. Key t x -> Key s x) -> Coercion (Key s k) (Key t k)
castKey = forall a p q.
(p :-> q) -> (q :-> p) -> Coercion (Refined p a) (Refined q a)
castRefined
cast
:: forall s t k. (forall x. Coercion (Key s x) (Key t x))
-> Coercion (Map s k) (Map t k)
cast :: forall s t k.
(forall x. Coercion (Key s x) (Key t x))
-> Coercion (Map s k) (Map t k)
cast Coercion (Key s Any) (Key t Any)
forall x. Coercion (Key s x) (Key t x)
Coercion = forall {k} (a :: k) (b :: k). Coercible a b => Coercion a b
Coercion
instance FunctorWithIndex (Key s k) (Map s k) where
imap :: forall a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
imap = forall s k a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
mapWithKey
instance FoldableWithIndex (Key s k) (Map s k) where
ifoldMap :: forall m a. Monoid m => (Key s k -> a -> m) -> Map s k a -> m
ifoldMap = forall s k a m. Monoid m => (Key s k -> a -> m) -> Map s k a -> m
foldMapWithKey
instance TraversableWithIndex (Key s k) (Map s k) where
itraverse :: forall (f :: * -> *) a b.
Applicative f =>
(Key s k -> a -> f b) -> Map s k a -> f (Map s k b)
itraverse = forall s (f :: * -> *) k a b.
Applicative f =>
(Key s k -> a -> f b) -> Map s k a -> f (Map s k b)
traverseWithKey
instance (Ord k, KnownSet s k) => Applicative (Map s k) where
pure :: forall a. a -> Map s k a
pure a
x = forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet \Key s k
_ -> a
x
<*> :: forall a b. Map s k (a -> b) -> Map s k a -> Map s k b
(<*>) = forall s k a b c.
Ord k =>
(Key s k -> a -> b -> c) -> Map s k a -> Map s k b -> Map s k c
zipWithKey (forall a b. a -> b -> a
const forall a. a -> a
id)
bind :: forall s k a b. Ord k => Map s k a -> (a -> Map s k b) -> Map s k b
bind :: forall s k a b. Ord k => Map s k a -> (a -> Map s k b) -> Map s k b
bind Map s k a
m a -> Map s k b
f = forall s k a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
mapWithKey (\Key s k
k a
x -> a -> Map s k b
f a
x forall s k a. Ord k => Map s k a -> Key s k -> a
! Key s k
k) Map s k a
m
instance (Ord k, KnownSet s k) => Monad (Map s k) where
>>= :: forall a b. Map s k a -> (a -> Map s k b) -> Map s k b
(>>=) = forall s k a b. Ord k => Map s k a -> (a -> Map s k b) -> Map s k b
bind
instance (Ord k, KnownSet s k) => MonadReader (Key s k) (Map s k) where
ask :: Map s k (Key s k)
ask = forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet forall a. a -> a
id
local :: forall a. (Key s k -> Key s k) -> Map s k a -> Map s k a
local Key s k -> Key s k
f Map s k a
m = forall s k a b. (Key s k -> a -> b) -> Map s k a -> Map s k b
mapWithKey (\Key s k
k a
_ -> Map s k a
m forall s k a. Ord k => Map s k a -> Key s k -> a
! Key s k -> Key s k
f Key s k
k) Map s k a
m
instance (Ord k, Semigroup a) => Semigroup (Map s k a) where
<> :: Map s k a -> Map s k a -> Map s k a
(<>) = forall s k a b c.
Ord k =>
(Key s k -> a -> b -> c) -> Map s k a -> Map s k b -> Map s k c
zipWithKey (forall a b. a -> b -> a
const forall a. Semigroup a => a -> a -> a
(<>))
instance (Ord k, KnownSet s k, Monoid a) => Monoid (Map s k a) where
mempty :: Map s k a
mempty = forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet \Key s k
_ -> forall a. Monoid a => a
mempty
instance (Ord k, KnownSet s k) => Distributive (Map s k) where
collect :: forall (f :: * -> *) a b.
Functor f =>
(a -> Map s k b) -> f a -> Map s k (f b)
collect = forall (f :: * -> *) (w :: * -> *) a b.
(Representable f, Functor w) =>
(a -> f b) -> w a -> f (w b)
collectRep
distribute :: forall (f :: * -> *) a. Functor f => f (Map s k a) -> Map s k (f a)
distribute = forall (f :: * -> *) (w :: * -> *) a.
(Representable f, Functor w) =>
w (f a) -> f (w a)
distributeRep
instance (Ord k, KnownSet s k) => Representable (Map s k) where
type Rep (Map s k) = Key s k
index :: forall a. Map s k a -> Rep (Map s k) -> a
index = forall s k a. Ord k => Map s k a -> Key s k -> a
(!)
tabulate :: forall a. (Rep (Map s k) -> a) -> Map s k a
tabulate = forall s k a. KnownSet s k => (Key s k -> a) -> Map s k a
fromSet
#if MIN_VERSION_hashable(1, 3, 4)
#else
instance (Hashable.Hashable a, Hashable.Hashable k)
=> Hashable.Hashable (Map s k a) where
hashWithSalt s (Map m) = Map.foldlWithKey'
(\s' k v -> Hashable.hashWithSalt (Hashable.hashWithSalt s' k) v)
(Hashable.hashWithSalt s (Map.size m))
m
#endif