{-# LANGUAGE DerivingStrategies #-}
{-# LANGUAGE FlexibleContexts #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE NoImplicitPrelude #-}
{-# LANGUAGE TemplateHaskell #-}
{-# LANGUAGE TypeApplications #-}
{-# LANGUAGE ViewPatterns #-}
module PlutusTx.Data.AssocMap (
Map,
lookup,
member,
insert,
delete,
singleton,
empty,
null,
toSOPList,
toBuiltinList,
safeFromSOPList,
unsafeFromSOPList,
unsafeFromDataList,
unsafeFromBuiltinList,
noDuplicateKeys,
all,
any,
union,
unionWith,
keys,
elems,
map,
mapThese,
foldr,
filter,
mapWithKey,
mapMaybe,
mapMaybeWithKey,
) where
import Data.Coerce (coerce)
import PlutusTx.Builtins qualified as P
import PlutusTx.Builtins.Internal qualified as BI
import PlutusTx.Data.List (List)
import PlutusTx.Data.List qualified as Data.List
import PlutusTx.IsData qualified as P
import PlutusTx.Lift (makeLift)
import PlutusTx.List qualified as SOP.List
import PlutusTx.Prelude hiding (mapMaybe)
import PlutusTx.These
import Prettyprinter (Pretty (..))
import Prelude qualified as Haskell
newtype Map k a = Map (BuiltinList (BuiltinPair BuiltinData BuiltinData))
deriving stock (Int -> Map k a -> ShowS
[Map k a] -> ShowS
Map k a -> String
(Int -> Map k a -> ShowS)
-> (Map k a -> String) -> ([Map k a] -> ShowS) -> Show (Map k a)
forall a.
(Int -> a -> ShowS) -> (a -> String) -> ([a] -> ShowS) -> Show a
forall k a. Int -> Map k a -> ShowS
forall k a. [Map k a] -> ShowS
forall k a. Map k a -> String
$cshowsPrec :: forall k a. Int -> Map k a -> ShowS
showsPrec :: Int -> Map k a -> ShowS
$cshow :: forall k a. Map k a -> String
show :: Map k a -> String
$cshowList :: forall k a. [Map k a] -> ShowS
showList :: [Map k a] -> ShowS
Haskell.Show)
instance P.ToData (Map k a) where
{-# INLINEABLE toBuiltinData #-}
toBuiltinData :: Map k a -> BuiltinData
toBuiltinData (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
d) = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> BuiltinData
BI.mkMap BuiltinList (BuiltinPair BuiltinData BuiltinData)
d
instance P.FromData (Map k a) where
{-# INLINABLE fromBuiltinData #-}
fromBuiltinData :: BuiltinData -> Maybe (Map k a)
fromBuiltinData = Map k a -> Maybe (Map k a)
forall a. a -> Maybe a
Just (Map k a -> Maybe (Map k a))
-> (BuiltinData -> Map k a) -> BuiltinData -> Maybe (Map k a)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> (BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinData
-> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinData -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
BI.unsafeDataAsMap
instance P.UnsafeFromData (Map k a) where
{-# INLINABLE unsafeFromBuiltinData #-}
unsafeFromBuiltinData :: BuiltinData -> Map k a
unsafeFromBuiltinData = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> (BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinData
-> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinData -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
BI.unsafeDataAsMap
instance
( Pretty k
, Pretty a
, P.UnsafeFromData k
, P.UnsafeFromData a
) => Pretty (Map k a) where
pretty :: forall ann. Map k a -> Doc ann
pretty = [(k, a)] -> Doc ann
forall ann. [(k, a)] -> Doc ann
forall a ann. Pretty a => a -> Doc ann
pretty ([(k, a)] -> Doc ann)
-> (Map k a -> [(k, a)]) -> Map k a -> Doc ann
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k a -> [(k, a)]
forall k a.
(UnsafeFromData k, UnsafeFromData a) =>
Map k a -> [(k, a)]
toSOPList
lookup :: forall k a. (P.ToData k, P.UnsafeFromData a) => k -> Map k a -> Maybe a
lookup :: forall k a. (ToData k, UnsafeFromData a) => k -> Map k a -> Maybe a
lookup (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
k) (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
m) = BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinData -> a) -> Maybe BuiltinData -> Maybe a
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' BuiltinData
k BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
{-# INLINEABLE lookup #-}
lookup'
:: BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' :: BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' BuiltinData
k BuiltinList (BuiltinPair BuiltinData BuiltinData)
m = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
forall {a}. BuiltinList (BuiltinPair BuiltinData a) -> Maybe a
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
where
go :: BuiltinList (BuiltinPair BuiltinData a) -> Maybe a
go =
Maybe a
-> (BuiltinPair BuiltinData a
-> BuiltinList (BuiltinPair BuiltinData a) -> Maybe a)
-> BuiltinList (BuiltinPair BuiltinData a)
-> Maybe a
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
Maybe a
forall a. Maybe a
Nothing
( \BuiltinPair BuiltinData a
hd ->
let k' :: BuiltinData
k' = BuiltinPair BuiltinData a -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData a
hd
in if BuiltinData -> BuiltinData -> Bool
P.equalsData BuiltinData
k BuiltinData
k'
then \BuiltinList (BuiltinPair BuiltinData a)
_ -> a -> Maybe a
forall a. a -> Maybe a
Just (BuiltinPair BuiltinData a -> a
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData a
hd)
else BuiltinList (BuiltinPair BuiltinData a) -> Maybe a
go
)
member :: forall k a. (P.ToData k) => k -> Map k a -> Bool
member :: forall k a. ToData k => k -> Map k a -> Bool
member (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
k) (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
m) = BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
member' BuiltinData
k BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
{-# INLINEABLE member #-}
member' :: BuiltinData -> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
member' :: BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
member' BuiltinData
k = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go =
Bool
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Bool
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
Bool
False
( \BuiltinPair BuiltinData BuiltinData
hd ->
let k' :: BuiltinData
k' = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
in if BuiltinData -> BuiltinData -> Bool
P.equalsData BuiltinData
k BuiltinData
k'
then \BuiltinList (BuiltinPair BuiltinData BuiltinData)
_ -> Bool
True
else BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
)
insert :: forall k a. (P.ToData k, P.ToData a) => k -> a -> Map k a -> Map k a
insert :: forall k a. (ToData k, ToData a) => k -> a -> Map k a -> Map k a
insert (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
k) (a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
a) (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
m) = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. (a -> b) -> a -> b
$ BuiltinData
-> BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
insert' BuiltinData
k BuiltinData
a BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
{-# INLINEABLE insert #-}
insert'
:: BuiltinData
-> BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
insert' :: BuiltinData
-> BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
insert' BuiltinData
k BuiltinData
a = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
nilCase :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
nilCase = BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k BuiltinData
a) BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
go ::
BuiltinList (BuiltinPair BuiltinData BuiltinData) ->
BuiltinList (BuiltinPair BuiltinData BuiltinData)
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nilCase
( \BuiltinPair BuiltinData BuiltinData
hd ->
if BuiltinData -> BuiltinData -> Bool
P.equalsData BuiltinData
k (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd)
then BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k BuiltinData
a)
else BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons BuiltinPair BuiltinData BuiltinData
hd (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
delete :: forall k a. (P.ToData k) => k -> Map k a -> Map k a
delete :: forall k a. ToData k => k -> Map k a -> Map k a
delete (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
k) = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k a
forall a b. Coercible a b => a -> b
coerce ((BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k a)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a
-> Map k a
forall a b. (a -> b) -> a -> b
$ BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
delete' BuiltinData
k
{-# INLINEABLE delete #-}
delete' ::
BuiltinData ->
BuiltinList (BuiltinPair BuiltinData BuiltinData) ->
BuiltinList (BuiltinPair BuiltinData BuiltinData)
delete' :: BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
delete' BuiltinData
k = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go ::
BuiltinList (BuiltinPair BuiltinData BuiltinData) ->
BuiltinList (BuiltinPair BuiltinData BuiltinData)
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
if BuiltinData -> BuiltinData -> Bool
P.equalsData BuiltinData
k (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd)
then BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> a
id
else BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons BuiltinPair BuiltinData BuiltinData
hd (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
singleton :: forall k a. (P.ToData k, P.ToData a) => k -> a -> Map k a
singleton :: forall k a. (ToData k, ToData a) => k -> a -> Map k a
singleton (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
k) (a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData -> BuiltinData
a) =
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. Coercible a b => a -> b
coerce (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. (a -> b) -> a -> b
$ BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k BuiltinData
a) BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
{-# INLINEABLE singleton #-}
empty :: forall k a. Map k a
empty :: forall k a. Map k a
empty = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
{-# INLINEABLE empty #-}
null :: forall k a. Map k a -> Bool
null :: forall k a. Map k a -> Bool
null =
forall a b. Coercible a b => a -> b
forall a b. Coercible a b => a -> b
coerce
@(BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
forall a. BuiltinList a -> Bool
P.null
{-# INLINEABLE null #-}
safeFromSOPList :: forall k a . (P.ToData k, P.ToData a) => [(k, a)] -> Map k a
safeFromSOPList :: forall k a. (ToData k, ToData a) => [(k, a)] -> Map k a
safeFromSOPList =
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map
(BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> ([(k, a)] -> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> [(k, a)]
-> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(BuiltinData, BuiltinData)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a arep. HasToOpaque a arep => a -> arep
toOpaque
([(BuiltinData, BuiltinData)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> ([(k, a)] -> [(BuiltinData, BuiltinData)])
-> [(k, a)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((k, a)
-> [(BuiltinData, BuiltinData)] -> [(BuiltinData, BuiltinData)])
-> [(BuiltinData, BuiltinData)]
-> [(k, a)]
-> [(BuiltinData, BuiltinData)]
forall a b. (a -> b -> b) -> b -> [a] -> b
SOP.List.foldr ((k
-> a
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)])
-> (k, a)
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)]
forall a b c. (a -> b -> c) -> (a, b) -> c
uncurry k
-> a
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)]
go) []
where
go :: k -> a -> [(BuiltinData, BuiltinData)] -> [(BuiltinData, BuiltinData)]
go :: k
-> a
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)]
go k
k a
v [] = [(k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData k
k, a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData a
v)]
go k
k a
v ((BuiltinData
k', BuiltinData
v') : [(BuiltinData, BuiltinData)]
rest) =
if k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData k
k BuiltinData -> BuiltinData -> Bool
forall a. Eq a => a -> a -> Bool
== BuiltinData
k'
then (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData k
k, a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData a
v) (BuiltinData, BuiltinData)
-> [(BuiltinData, BuiltinData)] -> [(BuiltinData, BuiltinData)]
forall a. a -> [a] -> [a]
: k
-> a
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)]
go k
k a
v [(BuiltinData, BuiltinData)]
rest
else (BuiltinData
k', BuiltinData
v') (BuiltinData, BuiltinData)
-> [(BuiltinData, BuiltinData)] -> [(BuiltinData, BuiltinData)]
forall a. a -> [a] -> [a]
: k
-> a
-> [(BuiltinData, BuiltinData)]
-> [(BuiltinData, BuiltinData)]
go k
k a
v [(BuiltinData, BuiltinData)]
rest
{-# INLINEABLE safeFromSOPList #-}
unsafeFromSOPList :: (P.ToData k, P.ToData a) => [(k, a)] -> Map k a
unsafeFromSOPList :: forall k a. (ToData k, ToData a) => [(k, a)] -> Map k a
unsafeFromSOPList =
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map
(BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> ([(k, a)] -> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> [(k, a)]
-> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. [(BuiltinData, BuiltinData)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a arep. HasToOpaque a arep => a -> arep
toOpaque
([(BuiltinData, BuiltinData)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> ([(k, a)] -> [(BuiltinData, BuiltinData)])
-> [(k, a)]
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. ((k, a) -> (BuiltinData, BuiltinData))
-> [(k, a)] -> [(BuiltinData, BuiltinData)]
forall a b. (a -> b) -> [a] -> [b]
SOP.List.map (\(k
k, a
a) -> (k -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData k
k, a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData a
a))
{-# INLINEABLE unsafeFromSOPList #-}
unsafeFromBuiltinList ::
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) ->
Map k a
unsafeFromBuiltinList :: forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
unsafeFromBuiltinList = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. Coercible a b => a -> b
coerce
{-# INLINEABLE unsafeFromBuiltinList #-}
unsafeFromDataList :: List (a, k) -> Map k a
unsafeFromDataList :: forall a k. List (a, k) -> Map k a
unsafeFromDataList =
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall a b. Coercible a b => a -> b
coerce (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a)
-> (List (a, k)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> List (a, k)
-> Map k a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go (BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (List (a, k) -> BuiltinList BuiltinData)
-> List (a, k)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. List (a, k) -> BuiltinList BuiltinData
forall a. List a -> BuiltinList BuiltinData
Data.List.toBuiltinList
where
go
:: BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go :: BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinData
-> BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinData
hd BuiltinList BuiltinData
tl ->
let (BuiltinData
a, BuiltinData
b) = BuiltinData -> (BuiltinData, BuiltinData)
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
hd
in BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
a BuiltinData
b) (BuiltinList BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go BuiltinList BuiltinData
tl)
)
{-# INLINEABLE unsafeFromDataList #-}
toSOPList :: (P.UnsafeFromData k, P.UnsafeFromData a) => Map k a -> [(k, a)]
toSOPList :: forall k a.
(UnsafeFromData k, UnsafeFromData a) =>
Map k a -> [(k, a)]
toSOPList Map k a
d = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> [(k, a)]
go (Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall k a.
Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
toBuiltinList Map k a
d)
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> [(k, a)]
go =
[(k, a)]
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> [(k, a)])
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> [(k, a)]
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
[]
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
(BuiltinData -> k
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd), BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd))
(k, a) -> [(k, a)] -> [(k, a)]
forall a. a -> [a] -> [a]
: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> [(k, a)]
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl
)
{-# INLINEABLE toSOPList #-}
toBuiltinList :: Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
toBuiltinList :: forall k a.
Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
toBuiltinList = Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a b. Coercible a b => a -> b
coerce
{-# INLINEABLE toBuiltinList #-}
noDuplicateKeys :: forall k a. Map k a -> Bool
noDuplicateKeys :: forall k a. Map k a -> Bool
noDuplicateKeys (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
m) = BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go =
Bool
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Bool
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
Bool
True
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
if BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
member' (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd) BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl then Bool
False else BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl
)
{-# INLINEABLE noDuplicateKeys #-}
all :: forall k a. (P.UnsafeFromData a) => (a -> Bool) -> Map k a -> Bool
all :: forall k a. UnsafeFromData a => (a -> Bool) -> Map k a -> Bool
all a -> Bool
p = (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> Map k a -> Bool
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go =
Bool
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Bool
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
Bool
True
( \BuiltinPair BuiltinData BuiltinData
hd ->
if a -> Bool
p (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd))
then BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
else \BuiltinList (BuiltinPair BuiltinData BuiltinData)
_ -> Bool
False
)
{-# INLINEABLE all #-}
any :: forall k a. (P.UnsafeFromData a) => (a -> Bool) -> Map k a -> Bool
any :: forall k a. UnsafeFromData a => (a -> Bool) -> Map k a -> Bool
any a -> Bool
p = (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> Map k a -> Bool
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go =
Bool
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Bool
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
Bool
False
( \BuiltinPair BuiltinData BuiltinData
hd ->
if a -> Bool
p (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd))
then \BuiltinList (BuiltinPair BuiltinData BuiltinData)
_ -> Bool
True
else BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
go
)
{-# INLINEABLE any #-}
union ::
forall k a b.
(P.UnsafeFromData a, P.UnsafeFromData b, P.ToData a, P.ToData b) =>
Map k a ->
Map k b ->
Map k (These a b)
union :: forall k a b.
(UnsafeFromData a, UnsafeFromData b, ToData a, ToData b) =>
Map k a -> Map k b -> Map k (These a b)
union (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls) (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs) = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Map k (These a b)
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
res
where
goLeft :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goLeft =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k :: BuiltinData
k = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
v :: BuiltinData
v = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd
v' :: BuiltinData
v' = case BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' BuiltinData
k BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs of
Just BuiltinData
r ->
These a b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData
( a -> b -> These a b
forall a b. a -> b -> These a b
These
(BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v)
(BuiltinData -> b
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
r)
:: These a b
)
Maybe BuiltinData
Nothing ->
These a b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData (a -> These a b
forall a b. a -> These a b
This (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v) :: These a b)
in BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k BuiltinData
v') (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goLeft BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl)
)
goRight :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goRight =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k :: BuiltinData
k = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
v :: BuiltinData
v = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd
v' :: BuiltinData
v' = case BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' BuiltinData
k BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls of
Just BuiltinData
r ->
These a b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData
( a -> b -> These a b
forall a b. a -> b -> These a b
These
(BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v)
(BuiltinData -> b
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
r)
:: These a b
)
Maybe BuiltinData
Nothing ->
These a b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData (b -> These a b
forall a b. b -> These a b
That (BuiltinData -> b
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v) :: These a b)
in BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k BuiltinData
v') (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goRight BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl)
)
res :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
res = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goLeft BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
`safeAppend` BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
goRight BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs
safeAppend :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
safeAppend BuiltinList (BuiltinPair BuiltinData BuiltinData)
xs1 BuiltinList (BuiltinPair BuiltinData BuiltinData)
xs2 =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. BuiltinList a -> r -> (a -> BuiltinList a -> r) -> r
P.matchList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
xs1
BuiltinList (BuiltinPair BuiltinData BuiltinData)
xs2
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k :: BuiltinData
k = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
v :: BuiltinData
v = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd
in BuiltinData
-> BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
insert' BuiltinData
k BuiltinData
v (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
safeAppend BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl BuiltinList (BuiltinPair BuiltinData BuiltinData)
xs2)
)
{-# INLINEABLE union #-}
unionWith ::
forall k a.
(P.UnsafeFromData a, P.ToData a) =>
(a -> a -> a) ->
Map k a ->
Map k a ->
Map k a
unionWith :: forall k a.
(UnsafeFromData a, ToData a) =>
(a -> a -> a) -> Map k a -> Map k a -> Map k a
unionWith a -> a -> a
f (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls) (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs) =
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
res
where
ls' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls' = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k' :: BuiltinData
k' = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
v' :: BuiltinData
v' = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd
v'' :: BuiltinData
v'' = case BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> Maybe BuiltinData
lookup' BuiltinData
k' BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs of
Just BuiltinData
r ->
a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData
(a -> a -> a
f (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v') (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
r))
Maybe BuiltinData
Nothing -> BuiltinData
v'
in BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k' BuiltinData
v'') (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl)
)
rs' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs' = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k' :: BuiltinData
k' = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
tl' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl' = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl
in if BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Bool
member' BuiltinData
k' BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls
then BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl'
else BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl'
)
res :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
res :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
res = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall {a}. BuiltinList a -> BuiltinList a -> BuiltinList a
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs' BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls'
where
go :: BuiltinList a -> BuiltinList a -> BuiltinList a
go BuiltinList a
acc =
BuiltinList a
-> (a -> BuiltinList a -> BuiltinList a)
-> BuiltinList a
-> BuiltinList a
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList a
acc
(\a
hd -> BuiltinList a -> BuiltinList a -> BuiltinList a
go (a -> BuiltinList a -> BuiltinList a
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons a
hd BuiltinList a
acc))
{-# INLINEABLE unionWith #-}
nil :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil = BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall arep. MkNil arep => BuiltinList arep
P.mkNil
{-# INLINEABLE nil #-}
keys'
:: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
keys' :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
keys' = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
forall {b}.
BuiltinList (BuiltinPair BuiltinData b) -> BuiltinList BuiltinData
go
where
go :: BuiltinList (BuiltinPair BuiltinData b) -> BuiltinList BuiltinData
go =
BuiltinList BuiltinData
-> (BuiltinPair BuiltinData b
-> BuiltinList (BuiltinPair BuiltinData b)
-> BuiltinList BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData b)
-> BuiltinList BuiltinData
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList BuiltinData
forall arep. MkNil arep => BuiltinList arep
P.mkNil
( \BuiltinPair BuiltinData b
hd ->
BuiltinData -> BuiltinList BuiltinData -> BuiltinList BuiltinData
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinPair BuiltinData b -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData b
hd) (BuiltinList BuiltinData -> BuiltinList BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData b)
-> BuiltinList BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData b)
-> BuiltinList BuiltinData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData b) -> BuiltinList BuiltinData
go
)
keys :: forall k a. Map k a -> List k
keys :: forall k a. Map k a -> List k
keys = BuiltinList BuiltinData -> List k
forall a. BuiltinList BuiltinData -> List a
Data.List.fromBuiltinList (BuiltinList BuiltinData -> List k)
-> (Map k a -> BuiltinList BuiltinData) -> Map k a -> List k
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
keys' (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData)
-> (Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a
-> BuiltinList BuiltinData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a b. Coercible a b => a -> b
coerce
{-# INLINEABLE keys #-}
elems :: forall k a . Map k a -> List a
elems :: forall k a. Map k a -> List a
elems = BuiltinList BuiltinData -> List a
forall a. BuiltinList BuiltinData -> List a
Data.List.fromBuiltinList (BuiltinList BuiltinData -> List a)
-> (Map k a -> BuiltinList BuiltinData) -> Map k a -> List a
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
go (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData)
-> (Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a
-> BuiltinList BuiltinData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Map k a -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a b. Coercible a b => a -> b
coerce
where
go
:: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
go =
BuiltinList BuiltinData
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList BuiltinData
forall arep. MkNil arep => BuiltinList arep
P.mkNil
( \BuiltinPair BuiltinData BuiltinData
hd ->
BuiltinData -> BuiltinList BuiltinData -> BuiltinList BuiltinData
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd) (BuiltinList BuiltinData -> BuiltinList BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList BuiltinData
go
)
{-# INLINEABLE elems #-}
mapThese
:: forall v k a b
. ( P.ToData a, P.ToData b, P.UnsafeFromData v)
=> (v -> These a b) -> Map k v -> (Map k a, Map k b)
mapThese :: forall v k a b.
(ToData a, ToData b, UnsafeFromData v) =>
(v -> These a b) -> Map k v -> (Map k a, Map k b)
mapThese v -> These a b
f (Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
m) = (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls, BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k b
forall k a.
BuiltinList (BuiltinPair BuiltinData BuiltinData) -> Map k a
Map BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs)
where
nilCase :: (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
nilCase = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil, BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil)
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls, BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs) = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
m
go
:: BuiltinList (BuiltinPair BuiltinData BuiltinData)
->
( BuiltinList (BuiltinPair BuiltinData BuiltinData)
, BuiltinList (BuiltinPair BuiltinData BuiltinData)
)
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
go =
(BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData)))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
(BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
nilCase
( \BuiltinPair BuiltinData BuiltinData
hd BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl ->
let k :: BuiltinData
k = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> a
BI.fst BuiltinPair BuiltinData BuiltinData
hd
v :: BuiltinData
v = BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls', BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs') = BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData),
BuiltinList (BuiltinPair BuiltinData BuiltinData))
go BuiltinList (BuiltinPair BuiltinData BuiltinData)
tl
in case BuiltinData -> These a b
f' BuiltinData
v of
This a
l' -> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData a
l')) BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls', BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs')
That b
r' -> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls', BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData b
r')) BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs')
These a
l' b
r' ->
( BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (a -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData a
l')) BuiltinList (BuiltinPair BuiltinData BuiltinData)
ls'
, BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons (BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData b
r')) BuiltinList (BuiltinPair BuiltinData BuiltinData)
rs'
)
)
f' :: BuiltinData -> These a b
f' :: BuiltinData -> These a b
f' = v -> These a b
f (v -> These a b) -> (BuiltinData -> v) -> BuiltinData -> These a b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinData -> v
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData
{-# INLINEABLE mapThese #-}
map :: forall k a b. (P.UnsafeFromData a, P.ToData b) => (a -> b) -> Map k a -> Map k b
map :: forall k a b.
(UnsafeFromData a, ToData b) =>
(a -> b) -> Map k a -> Map k b
map a -> b
f = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k b
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
let (BuiltinData
k, BuiltinData
v) = BuiltinPair BuiltinData BuiltinData -> (BuiltinData, BuiltinData)
forall a b. BuiltinPair a b -> (a, b)
P.pairToPair BuiltinPair BuiltinData BuiltinData
hd
in
BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons
(BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData (a -> b
f (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v))))
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
{-# INLINEABLE map #-}
foldr
:: forall a b k
. (P.UnsafeFromData a)
=> (a -> b -> b) -> b -> Map k a -> b
foldr :: forall a b k.
UnsafeFromData a =>
(a -> b -> b) -> b -> Map k a -> b
foldr a -> b -> b
f b
z = (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b)
-> Map k a -> b
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b
go =
b
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> b
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
b
z
( \BuiltinPair BuiltinData BuiltinData
hd ->
a -> b -> b
f (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd)) (b -> b)
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> b
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData) -> b
go
)
{-# INLINEABLE foldr #-}
filter
:: forall k a
. (P.UnsafeFromData a)
=> (a -> Bool) -> Map k a -> Map k a
filter :: forall k a. UnsafeFromData a => (a -> Bool) -> Map k a -> Map k a
filter a -> Bool
p = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k a
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
if a -> Bool
p (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData (BuiltinPair BuiltinData BuiltinData -> BuiltinData
forall a b. BuiltinPair a b -> b
BI.snd BuiltinPair BuiltinData BuiltinData
hd))
then BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons BuiltinPair BuiltinData BuiltinData
hd (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
else BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
{-# INLINEABLE filter #-}
mapWithKey
:: forall k a b
. (P.UnsafeFromData k, P.UnsafeFromData a, P.ToData b)
=> (k -> a -> b) -> Map k a -> Map k b
mapWithKey :: forall k a b.
(UnsafeFromData k, UnsafeFromData a, ToData b) =>
(k -> a -> b) -> Map k a -> Map k b
mapWithKey k -> a -> b
f = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k b
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
let (BuiltinData
k, BuiltinData
v) = BuiltinPair BuiltinData BuiltinData -> (BuiltinData, BuiltinData)
forall a b. BuiltinPair a b -> (a, b)
P.pairToPair BuiltinPair BuiltinData BuiltinData
hd
in
BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons
(BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k
(b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData
(k -> a -> b
f
(BuiltinData -> k
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
k)
(BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v)
)
)
)
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
{-# INLINEABLE mapWithKey #-}
mapMaybe
:: forall k a b
. (P.UnsafeFromData a, P.ToData b)
=> (a -> Maybe b) -> Map k a -> Map k b
mapMaybe :: forall k a b.
(UnsafeFromData a, ToData b) =>
(a -> Maybe b) -> Map k a -> Map k b
mapMaybe a -> Maybe b
f = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k b
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
let (BuiltinData
k, BuiltinData
v) = BuiltinPair BuiltinData BuiltinData -> (BuiltinData, BuiltinData)
forall a b. BuiltinPair a b -> (a, b)
P.pairToPair BuiltinPair BuiltinData BuiltinData
hd
in case a -> Maybe b
f (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v) of
Just b
v' ->
BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons
(BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData b
v'))
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
Maybe b
Nothing -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
{-# INLINEABLE mapMaybe #-}
mapMaybeWithKey
:: forall k a b
. (P.UnsafeFromData k, P.UnsafeFromData a, P.ToData b)
=> (k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey :: forall k a b.
(UnsafeFromData k, UnsafeFromData a, ToData b) =>
(k -> a -> Maybe b) -> Map k a -> Map k b
mapMaybeWithKey k -> a -> Maybe b
f = (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> Map k a -> Map k b
forall a b. Coercible a b => a -> b
coerce BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
where
go :: BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go =
BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> (BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a r. r -> (a -> BuiltinList a -> r) -> BuiltinList a -> r
P.caseList'
BuiltinList (BuiltinPair BuiltinData BuiltinData)
nil
( \BuiltinPair BuiltinData BuiltinData
hd ->
let (BuiltinData
k, BuiltinData
v) = BuiltinPair BuiltinData BuiltinData -> (BuiltinData, BuiltinData)
forall a b. BuiltinPair a b -> (a, b)
P.pairToPair BuiltinPair BuiltinData BuiltinData
hd
in case k -> a -> Maybe b
f (BuiltinData -> k
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
k) (BuiltinData -> a
forall a. UnsafeFromData a => BuiltinData -> a
P.unsafeFromBuiltinData BuiltinData
v) of
Just b
v' ->
BuiltinPair BuiltinData BuiltinData
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall a. a -> BuiltinList a -> BuiltinList a
BI.mkCons
(BuiltinData -> BuiltinData -> BuiltinPair BuiltinData BuiltinData
BI.mkPairData BuiltinData
k (b -> BuiltinData
forall a. ToData a => a -> BuiltinData
P.toBuiltinData b
v'))
(BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> (BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData))
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
forall b c a. (b -> c) -> (a -> b) -> a -> c
. BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
Maybe b
Nothing -> BuiltinList (BuiltinPair BuiltinData BuiltinData)
-> BuiltinList (BuiltinPair BuiltinData BuiltinData)
go
)
{-# INLINEABLE mapMaybeWithKey #-}
makeLift ''Map