{-# LANGUAGE KindSignatures #-}
{-# LANGUAGE BangPatterns #-}
{-# LANGUAGE RankNTypes #-}
{-# LANGUAGE TypeFamilies #-}
{-# OPTIONS_GHC -O2 #-}
module Data.Map.Unboxed.Lifted
( Map(..)
, empty
, singleton
, lookup
, size
, map
, mapMaybe
, mapMaybeWithKey
, mapWithKey
, keys
, intersectionWith
, intersectionsWith
, restrict
, appendWithKey
, foldrWithKey
, foldlWithKey'
, foldrWithKey'
, foldMapWithKey
, foldMapWithKey'
, foldlWithKeyM'
, foldrWithKeyM'
, foldlMapWithKeyM'
, foldrMapWithKeyM'
, traverse
, traverseWithKey
, traverseWithKey_
, toList
, fromList
, fromListAppend
, fromListN
, fromListAppendN
, fromSet
, elems
, unsafeFreezeZip
) where
import Prelude hiding (lookup,map,traverse)
import Control.DeepSeq (NFData)
import Control.Monad.ST (ST)
import Data.List.NonEmpty (NonEmpty)
import Data.Primitive (PrimArray,Array,MutablePrimArray,MutableArray)
import Data.Primitive.Types (Prim)
import Data.Semigroup (Semigroup)
import Data.Set.Unboxed.Internal (Set(..))
import qualified Control.DeepSeq
import qualified Data.Map.Internal as I
import qualified Data.Semigroup as SG
import qualified GHC.Exts as E
newtype Map k v = Map (I.Map PrimArray Array k v)
instance Prim k => Functor (Map k) where
fmap :: forall a b. (a -> b) -> Map k a -> Map k b
fmap = forall k v w. Prim k => (v -> w) -> Map k v -> Map k w
map
instance (Prim k, NFData k, NFData v) => NFData (Map k v) where
rnf :: Map k v -> ()
rnf (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, NFData k, NFData v) =>
Map karr varr k v -> ()
I.rnf Map PrimArray Array k v
m
instance (Prim k, Ord k, Semigroup v) => Semigroup (Map k v) where
Map Map PrimArray Array k v
x <> :: Map k v -> Map k v -> Map k v
<> Map Map PrimArray Array k v
y = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Ord k, Semigroup v) =>
Map karr varr k v -> Map karr varr k v -> Map karr varr k v
I.append Map PrimArray Array k v
x Map PrimArray Array k v
y)
instance (Prim k, Ord k, Semigroup v) => Monoid (Map k v) where
mempty :: Map k v
mempty = forall k v. Map PrimArray Array k v -> Map k v
Map forall (karr :: * -> *) (varr :: * -> *) k v.
(ContiguousU karr, ContiguousU varr) =>
Map karr varr k v
I.empty
mappend :: Map k v -> Map k v -> Map k v
mappend = forall a. Semigroup a => a -> a -> a
(SG.<>)
mconcat :: [Map k v] -> Map k v
mconcat = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v, Semigroup v) =>
[Map karr varr k v] -> Map karr varr k v
I.concat forall b c a. (b -> c) -> (a -> b) -> a -> c
. coerce :: forall a b. Coercible a b => a -> b
E.coerce
instance (Prim k, Eq k, Eq v) => Eq (Map k v) where
Map Map PrimArray Array k v
x == :: Map k v -> Map k v -> Bool
== Map Map PrimArray Array k v
y = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Eq k, ContiguousU varr,
Element varr v, Eq v) =>
Map karr varr k v -> Map karr varr k v -> Bool
I.equals Map PrimArray Array k v
x Map PrimArray Array k v
y
instance (Prim k, Ord k, Ord v) => Ord (Map k v) where
compare :: Map k v -> Map k v -> Ordering
compare (Map Map PrimArray Array k v
x) (Map Map PrimArray Array k v
y) = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v, Ord v) =>
Map karr varr k v -> Map karr varr k v -> Ordering
I.compare Map PrimArray Array k v
x Map PrimArray Array k v
y
instance (Prim k, Ord k) => E.IsList (Map k v) where
type Item (Map k v) = (k,v)
fromListN :: Int -> [Item (Map k v)] -> Map k v
fromListN Int
n = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
Int -> [(k, v)] -> Map karr varr k v
I.fromListN Int
n
fromList :: [Item (Map k v)] -> Map k v
fromList = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
[(k, v)] -> Map karr varr k v
I.fromList
toList :: Map k v -> [Item (Map k v)]
toList (Map Map PrimArray Array k v
s) = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
Map karr varr k v -> [(k, v)]
I.toList Map PrimArray Array k v
s
instance (Prim k, Show k, Show v) => Show (Map k v) where
showsPrec :: Int -> Map k v -> ShowS
showsPrec Int
p (Map Map PrimArray Array k v
s) = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Show k, ContiguousU varr,
Element varr v, Show v) =>
Int -> Map karr varr k v -> ShowS
I.showsPrec Int
p Map PrimArray Array k v
s
lookup :: (Prim k, Ord k) => k -> Map k v -> Maybe v
lookup :: forall k v. (Prim k, Ord k) => k -> Map k v -> Maybe v
lookup k
a (Map Map PrimArray Array k v
s) = forall (karr :: * -> *) (varr :: * -> *) k v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
k -> Map karr varr k v -> Maybe v
I.lookup k
a Map PrimArray Array k v
s
empty :: Map k v
empty :: forall k v. Map k v
empty = forall k v. Map PrimArray Array k v -> Map k v
Map forall (karr :: * -> *) (varr :: * -> *) k v.
(ContiguousU karr, ContiguousU varr) =>
Map karr varr k v
I.empty
singleton :: Prim k => k -> v -> Map k v
singleton :: forall k v. Prim k => k -> v -> Map k v
singleton k
k v
v = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
k -> v -> Map karr varr k v
I.singleton k
k v
v)
toList :: (Prim k, Ord k) => Map k v -> [(k,v)]
toList :: forall k v. (Prim k, Ord k) => Map k v -> [(k, v)]
toList (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
Map karr varr k v -> [(k, v)]
I.toList Map PrimArray Array k v
m
fromList :: (Prim k, Ord k) => [(k,v)] -> Map k v
fromList :: forall k v. (Prim k, Ord k) => [(k, v)] -> Map k v
fromList = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
[(k, v)] -> Map karr varr k v
I.fromList
fromListN :: (Prim k, Ord k)
=> Int
-> [(k,v)]
-> Map k v
fromListN :: forall k v. (Prim k, Ord k) => Int -> [(k, v)] -> Map k v
fromListN Int
n = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
Int -> [(k, v)] -> Map karr varr k v
I.fromListN Int
n
fromListAppend :: (Prim k, Ord k, Semigroup v) => [(k,v)] -> Map k v
fromListAppend :: forall k v. (Prim k, Ord k, Semigroup v) => [(k, v)] -> Map k v
fromListAppend = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v, Semigroup v) =>
[(k, v)] -> Map karr varr k v
I.fromListAppend
fromListAppendN :: (Prim k, Ord k, Semigroup v)
=> Int
-> [(k,v)]
-> Map k v
fromListAppendN :: forall k v.
(Prim k, Ord k, Semigroup v) =>
Int -> [(k, v)] -> Map k v
fromListAppendN Int
n = forall k v. Map PrimArray Array k v -> Map k v
Map forall b c a. (b -> c) -> (a -> b) -> a -> c
. forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v, Semigroup v) =>
Int -> [(k, v)] -> Map karr varr k v
I.fromListAppendN Int
n
fromSet :: Prim k
=> (k -> v)
-> Set k
-> Map k v
fromSet :: forall k v. Prim k => (k -> v) -> Set k -> Map k v
fromSet k -> v
f (Set Set PrimArray k
s) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(k -> v) -> Set karr k -> Map karr varr k v
I.fromSet k -> v
f Set PrimArray k
s)
size :: Map k v -> Int
size :: forall k v. Map k v -> Int
size (Map Map PrimArray Array k v
m) = forall (varr :: * -> *) v (karr :: * -> *) k.
(ContiguousU varr, Element varr v) =>
Map karr varr k v -> Int
I.size Map PrimArray Array k v
m
map :: Prim k
=> (v -> w)
-> Map k v
-> Map k w
map :: forall k v w. Prim k => (v -> w) -> Map k v -> Map k w
map v -> w
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (varr :: * -> *) (warr :: * -> *) v w (karr :: * -> *) k.
(ContiguousU varr, ContiguousU warr, Element varr v,
Element warr w) =>
(v -> w) -> Map karr varr k v -> Map karr warr k w
I.map v -> w
f Map PrimArray Array k v
m)
mapMaybe :: Prim k
=> (v -> Maybe w)
-> Map k v
-> Map k w
mapMaybe :: forall k v w. Prim k => (v -> Maybe w) -> Map k v -> Map k w
mapMaybe v -> Maybe w
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) (varr :: * -> *) k v w.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Element varr w) =>
(v -> Maybe w) -> Map karr varr k v -> Map karr varr k w
I.mapMaybe v -> Maybe w
f Map PrimArray Array k v
m)
mapMaybeWithKey :: Prim k
=> (k -> v -> Maybe w)
-> Map k v
-> Map k w
mapMaybeWithKey :: forall k v w. Prim k => (k -> v -> Maybe w) -> Map k v -> Map k w
mapMaybeWithKey k -> v -> Maybe w
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) (varr :: * -> *) k v w.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Element varr w) =>
(k -> v -> Maybe w) -> Map karr varr k v -> Map karr varr k w
I.mapMaybeWithKey k -> v -> Maybe w
f Map PrimArray Array k v
m)
mapWithKey :: Prim k
=> (k -> v -> w)
-> Map k v
-> Map k w
mapWithKey :: forall k v w. Prim k => (k -> v -> w) -> Map k v -> Map k w
mapWithKey k -> v -> w
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) (varr :: * -> *) k v w.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Element varr w) =>
(k -> v -> w) -> Map karr varr k v -> Map karr varr k w
I.mapWithKey k -> v -> w
f Map PrimArray Array k v
m)
appendWithKey :: (Prim k, Ord k)
=> (k -> v -> v -> v)
-> Map k v
-> Map k v
-> Map k v
appendWithKey :: forall k v.
(Prim k, Ord k) =>
(k -> v -> v -> v) -> Map k v -> Map k v -> Map k v
appendWithKey k -> v -> v -> v
f (Map Map PrimArray Array k v
m) (Map Map PrimArray Array k v
n) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Ord k) =>
(k -> v -> v -> v)
-> Map karr varr k v -> Map karr varr k v -> Map karr varr k v
I.appendWithKey k -> v -> v -> v
f Map PrimArray Array k v
m Map PrimArray Array k v
n)
traverse :: (Applicative f, Prim k)
=> (v -> f b)
-> Map k v
-> f (Map k b)
traverse :: forall (f :: * -> *) k v b.
(Applicative f, Prim k) =>
(v -> f b) -> Map k v -> f (Map k b)
traverse v -> f b
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (m :: * -> *) (karr :: * -> *) k (varr :: * -> *) v w.
(Applicative m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Element varr w) =>
(v -> m w) -> Map karr varr k v -> m (Map karr varr k w)
I.traverse v -> f b
f Map PrimArray Array k v
m
traverseWithKey :: (Applicative f, Prim k)
=> (k -> v -> f b)
-> Map k v
-> f (Map k b)
traverseWithKey :: forall (f :: * -> *) k v b.
(Applicative f, Prim k) =>
(k -> v -> f b) -> Map k v -> f (Map k b)
traverseWithKey k -> v -> f b
f (Map Map PrimArray Array k v
m) = forall k v. Map PrimArray Array k v -> Map k v
Map forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> forall (karr :: * -> *) k (varr :: * -> *) v v' (f :: * -> *).
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Element varr v', Applicative f) =>
(k -> v -> f v') -> Map karr varr k v -> f (Map karr varr k v')
I.traverseWithKey k -> v -> f b
f Map PrimArray Array k v
m
traverseWithKey_ :: (Applicative f, Prim k)
=> (k -> v -> f b)
-> Map k v
-> f ()
traverseWithKey_ :: forall (f :: * -> *) k v b.
(Applicative f, Prim k) =>
(k -> v -> f b) -> Map k v -> f ()
traverseWithKey_ k -> v -> f b
f (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v (m :: * -> *) b.
(Applicative m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(k -> v -> m b) -> Map karr varr k v -> m ()
I.traverseWithKey_ k -> v -> f b
f Map PrimArray Array k v
m
foldlWithKeyM' :: (Monad m, Prim k)
=> (b -> k -> v -> m b)
-> b
-> Map k v
-> m b
foldlWithKeyM' :: forall (m :: * -> *) k b v.
(Monad m, Prim k) =>
(b -> k -> v -> m b) -> b -> Map k v -> m b
foldlWithKeyM' b -> k -> v -> m b
f b
b0 (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v (m :: * -> *) b.
(Monad m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(b -> k -> v -> m b) -> b -> Map karr varr k v -> m b
I.foldlWithKeyM' b -> k -> v -> m b
f b
b0 Map PrimArray Array k v
m
foldrWithKeyM' :: (Monad m, Prim k)
=> (k -> v -> b -> m b)
-> b
-> Map k v
-> m b
foldrWithKeyM' :: forall (m :: * -> *) k v b.
(Monad m, Prim k) =>
(k -> v -> b -> m b) -> b -> Map k v -> m b
foldrWithKeyM' k -> v -> b -> m b
f b
b0 (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v (m :: * -> *) b.
(Monad m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(k -> v -> b -> m b) -> b -> Map karr varr k v -> m b
I.foldrWithKeyM' k -> v -> b -> m b
f b
b0 Map PrimArray Array k v
m
foldlMapWithKeyM' :: (Monad m, Monoid b, Prim k)
=> (k -> v -> m b)
-> Map k v
-> m b
foldlMapWithKeyM' :: forall (m :: * -> *) b k v.
(Monad m, Monoid b, Prim k) =>
(k -> v -> m b) -> Map k v -> m b
foldlMapWithKeyM' k -> v -> m b
f (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v (m :: * -> *) b.
(Monad m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Monoid b) =>
(k -> v -> m b) -> Map karr varr k v -> m b
I.foldlMapWithKeyM' k -> v -> m b
f Map PrimArray Array k v
m
foldrMapWithKeyM' :: (Monad m, Monoid b, Prim k)
=> (k -> v -> m b)
-> Map k v
-> m b
foldrMapWithKeyM' :: forall (m :: * -> *) b k v.
(Monad m, Monoid b, Prim k) =>
(k -> v -> m b) -> Map k v -> m b
foldrMapWithKeyM' k -> v -> m b
f (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v (m :: * -> *) b.
(Monad m, ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Monoid b) =>
(k -> v -> m b) -> Map karr varr k v -> m b
I.foldrMapWithKeyM' k -> v -> m b
f Map PrimArray Array k v
m
foldlWithKey' :: Prim k
=> (b -> k -> v -> b)
-> b
-> Map k v
-> b
foldlWithKey' :: forall k b v. Prim k => (b -> k -> v -> b) -> b -> Map k v -> b
foldlWithKey' b -> k -> v -> b
f b
b0 (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v b.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(b -> k -> v -> b) -> b -> Map karr varr k v -> b
I.foldlWithKey' b -> k -> v -> b
f b
b0 Map PrimArray Array k v
m
foldrWithKey :: Prim k
=> (k -> v -> b -> b)
-> b
-> Map k v
-> b
foldrWithKey :: forall k v b. Prim k => (k -> v -> b -> b) -> b -> Map k v -> b
foldrWithKey k -> v -> b -> b
f b
b0 (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) k (varr :: * -> *) v b.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(k -> v -> b -> b) -> b -> Map karr varr k v -> b
I.foldrWithKey k -> v -> b -> b
f b
b0 Map PrimArray Array k v
m
foldrWithKey' :: Prim k
=> (k -> v -> b -> b)
-> b
-> Map k v
-> b
foldrWithKey' :: forall k v b. Prim k => (k -> v -> b -> b) -> b -> Map k v -> b
foldrWithKey' k -> v -> b -> b
f b
b0 (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v b.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v) =>
(k -> v -> b -> b) -> b -> Map karr varr k v -> b
I.foldrWithKey' k -> v -> b -> b
f b
b0 Map PrimArray Array k v
m
foldMapWithKey :: (Monoid b, Prim k)
=> (k -> v -> b)
-> Map k v
-> b
foldMapWithKey :: forall b k v. (Monoid b, Prim k) => (k -> v -> b) -> Map k v -> b
foldMapWithKey k -> v -> b
f (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) k (varr :: * -> *) v m.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Monoid m) =>
(k -> v -> m) -> Map karr varr k v -> m
I.foldMapWithKey k -> v -> b
f Map PrimArray Array k v
m
foldMapWithKey' :: (Monoid b, Prim k)
=> (k -> v -> b)
-> Map k v
-> b
foldMapWithKey' :: forall b k v. (Monoid b, Prim k) => (k -> v -> b) -> Map k v -> b
foldMapWithKey' k -> v -> b
f (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v m.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Monoid m) =>
(k -> v -> m) -> Map karr varr k v -> m
I.foldMapWithKey' k -> v -> b
f Map PrimArray Array k v
m
unsafeFreezeZip :: (Ord k, Prim k)
=> MutablePrimArray s k
-> MutableArray s v
-> ST s (Map k v)
unsafeFreezeZip :: forall k s v.
(Ord k, Prim k) =>
MutablePrimArray s k -> MutableArray s v -> ST s (Map k v)
unsafeFreezeZip MutablePrimArray s k
theKeys MutableArray s v
vals = forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v s.
(ContiguousU karr, Element karr k, Ord k, ContiguousU varr,
Element varr v) =>
Mutable karr s k -> Mutable varr s v -> ST s (Map karr varr k v)
I.unsafeFreezeZip MutablePrimArray s k
theKeys MutableArray s v
vals)
keys :: Map k v -> Set k
keys :: forall k v. Map k v -> Set k
keys (Map Map PrimArray Array k v
m) = forall a. Set PrimArray a -> Set a
Set (forall (karr :: * -> *) (varr :: * -> *) k v.
Map karr varr k v -> Set karr k
I.keys Map PrimArray Array k v
m)
intersectionWith :: (Prim k, Ord k)
=> (a -> b -> c)
-> Map k a
-> Map k b
-> Map k c
intersectionWith :: forall k a b c.
(Prim k, Ord k) =>
(a -> b -> c) -> Map k a -> Map k b -> Map k c
intersectionWith a -> b -> c
f (Map Map PrimArray Array k a
a) (Map Map PrimArray Array k b
b) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall k v w x (karr :: * -> *) (varr :: * -> *) (warr :: * -> *)
(xarr :: * -> *).
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, ContiguousU warr, Element warr w, ContiguousU xarr,
Element xarr x, Ord k) =>
(v -> w -> x)
-> Map karr varr k v -> Map karr warr k w -> Map karr xarr k x
I.intersectionWith a -> b -> c
f Map PrimArray Array k a
a Map PrimArray Array k b
b)
intersectionsWith :: (Prim k, Ord k)
=> (v -> v -> v)
-> NonEmpty (Map k v)
-> Map k v
intersectionsWith :: forall k v.
(Prim k, Ord k) =>
(v -> v -> v) -> NonEmpty (Map k v) -> Map k v
intersectionsWith v -> v -> v
f NonEmpty (Map k v)
xs = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) k (varr :: * -> *) v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Ord k) =>
(v -> v -> v) -> NonEmpty (Map karr varr k v) -> Map karr varr k v
I.intersectionsWith v -> v -> v
f (coerce :: forall a b. Coercible a b => a -> b
E.coerce NonEmpty (Map k v)
xs))
restrict :: (Prim k, Ord k)
=> Map k v
-> Set k
-> Map k v
restrict :: forall k v. (Prim k, Ord k) => Map k v -> Set k -> Map k v
restrict (Map Map PrimArray Array k v
m) (Set Set PrimArray k
s) = forall k v. Map PrimArray Array k v -> Map k v
Map (forall (karr :: * -> *) (varr :: * -> *) k v.
(ContiguousU karr, Element karr k, ContiguousU varr,
Element varr v, Ord k) =>
Map karr varr k v -> Set karr k -> Map karr varr k v
I.restrict Map PrimArray Array k v
m Set PrimArray k
s)
elems :: Map k v -> Array v
elems :: forall k v. Map k v -> Array v
elems (Map Map PrimArray Array k v
m) = forall (karr :: * -> *) (varr :: * -> *) k v.
Map karr varr k v -> varr v
I.elems Map PrimArray Array k v
m