module GHC.Types.Var.Env (
VarEnv, IdEnv, TyVarEnv, CoVarEnv, TyCoVarEnv,
emptyVarEnv, unitVarEnv, mkVarEnv, mkVarEnv_Directly,
elemVarEnv, disjointVarEnv,
extendVarEnv, extendVarEnv_C, extendVarEnv_Acc,
extendVarEnvList,
plusVarEnv, plusVarEnv_C, plusVarEnv_CD, plusMaybeVarEnv_C,
plusVarEnvList, alterVarEnv,
delVarEnvList, delVarEnv,
minusVarEnv,
lookupVarEnv, lookupVarEnv_NF, lookupWithDefaultVarEnv,
mapVarEnv, zipVarEnv,
modifyVarEnv, modifyVarEnv_Directly,
isEmptyVarEnv,
elemVarEnvByKey,
filterVarEnv, restrictVarEnv,
partitionVarEnv,
DVarEnv, DIdEnv, DTyVarEnv,
emptyDVarEnv, mkDVarEnv,
dVarEnvElts,
extendDVarEnv, extendDVarEnv_C,
extendDVarEnvList,
lookupDVarEnv, elemDVarEnv,
isEmptyDVarEnv, foldDVarEnv, nonDetStrictFoldDVarEnv,
mapDVarEnv, filterDVarEnv,
modifyDVarEnv,
alterDVarEnv,
plusDVarEnv, plusDVarEnv_C,
unitDVarEnv,
delDVarEnv,
delDVarEnvList,
minusDVarEnv,
partitionDVarEnv,
anyDVarEnv,
InScopeSet,
emptyInScopeSet, mkInScopeSet, delInScopeSet,
extendInScopeSet, extendInScopeSetList, extendInScopeSetSet,
getInScopeVars, lookupInScope, lookupInScope_Directly,
unionInScope, elemInScopeSet, uniqAway,
varSetInScope,
unsafeGetFreshLocalUnique,
RnEnv2,
mkRnEnv2, rnBndr2, rnBndrs2, rnBndr2_var,
rnOccL, rnOccR, inRnEnvL, inRnEnvR, rnOccL_maybe, rnOccR_maybe,
rnBndrL, rnBndrR, nukeRnEnvL, nukeRnEnvR, rnSwap,
delBndrL, delBndrR, delBndrsL, delBndrsR,
addRnInScopeSet,
rnEtaL, rnEtaR,
rnInScope, rnInScopeSet, lookupRnInScope,
rnEnvL, rnEnvR,
TidyEnv,
emptyTidyEnv, mkEmptyTidyEnv, delTidyEnvList
) where
import GHC.Prelude
import qualified Data.IntMap.Strict as IntMap
import GHC.Types.Name.Occurrence
import GHC.Types.Name
import GHC.Types.Var as Var
import GHC.Types.Var.Set
import GHC.Types.Unique.Set
import GHC.Types.Unique.FM
import GHC.Types.Unique.DFM
import GHC.Types.Unique
import GHC.Utils.Misc
import GHC.Data.Maybe
import GHC.Utils.Outputable
newtype InScopeSet = InScope VarSet
instance Outputable InScopeSet where
ppr :: InScopeSet -> SDoc
ppr (InScope VarSet
s) =
String -> SDoc
text String
"InScope" SDoc -> SDoc -> SDoc
<+>
SDoc -> SDoc
braces ([SDoc] -> SDoc
fsep ((Var -> SDoc) -> [Var] -> [SDoc]
forall a b. (a -> b) -> [a] -> [b]
map (Name -> SDoc
forall a. Outputable a => a -> SDoc
External instance of the constraint type Outputable Name
ppr (Name -> SDoc) -> (Var -> Name) -> Var -> SDoc
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Var -> Name
Var.varName) (VarSet -> [Var]
forall elt. UniqSet elt -> [elt]
nonDetEltsUniqSet VarSet
s)))
emptyInScopeSet :: InScopeSet
emptyInScopeSet :: InScopeSet
emptyInScopeSet = VarSet -> InScopeSet
InScope VarSet
emptyVarSet
getInScopeVars :: InScopeSet -> VarSet
getInScopeVars :: InScopeSet -> VarSet
getInScopeVars (InScope VarSet
vs) = VarSet
vs
mkInScopeSet :: VarSet -> InScopeSet
mkInScopeSet :: VarSet -> InScopeSet
mkInScopeSet VarSet
in_scope = VarSet -> InScopeSet
InScope VarSet
in_scope
extendInScopeSet :: InScopeSet -> Var -> InScopeSet
extendInScopeSet :: InScopeSet -> Var -> InScopeSet
extendInScopeSet (InScope VarSet
in_scope) Var
v
= VarSet -> InScopeSet
InScope (VarSet -> Var -> VarSet
extendVarSet VarSet
in_scope Var
v)
extendInScopeSetList :: InScopeSet -> [Var] -> InScopeSet
extendInScopeSetList :: InScopeSet -> [Var] -> InScopeSet
extendInScopeSetList (InScope VarSet
in_scope) [Var]
vs
= VarSet -> InScopeSet
InScope (VarSet -> InScopeSet) -> VarSet -> InScopeSet
forall a b. (a -> b) -> a -> b
$ (VarSet -> Var -> VarSet) -> VarSet -> [Var] -> VarSet
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
External instance of the constraint type Foldable []
foldl' VarSet -> Var -> VarSet
extendVarSet VarSet
in_scope [Var]
vs
extendInScopeSetSet :: InScopeSet -> VarSet -> InScopeSet
extendInScopeSetSet :: InScopeSet -> VarSet -> InScopeSet
extendInScopeSetSet (InScope VarSet
in_scope) VarSet
vs
= VarSet -> InScopeSet
InScope (VarSet
in_scope VarSet -> VarSet -> VarSet
`unionVarSet` VarSet
vs)
delInScopeSet :: InScopeSet -> Var -> InScopeSet
delInScopeSet :: InScopeSet -> Var -> InScopeSet
delInScopeSet (InScope VarSet
in_scope) Var
v = VarSet -> InScopeSet
InScope (VarSet
in_scope VarSet -> Var -> VarSet
`delVarSet` Var
v)
elemInScopeSet :: Var -> InScopeSet -> Bool
elemInScopeSet :: Var -> InScopeSet -> Bool
elemInScopeSet Var
v (InScope VarSet
in_scope) = Var
v Var -> VarSet -> Bool
`elemVarSet` VarSet
in_scope
lookupInScope :: InScopeSet -> Var -> Maybe Var
lookupInScope :: InScopeSet -> Var -> Maybe Var
lookupInScope (InScope VarSet
in_scope) Var
v = VarSet -> Var -> Maybe Var
lookupVarSet VarSet
in_scope Var
v
lookupInScope_Directly :: InScopeSet -> Unique -> Maybe Var
lookupInScope_Directly :: InScopeSet -> Unique -> Maybe Var
lookupInScope_Directly (InScope VarSet
in_scope) Unique
uniq
= VarSet -> Unique -> Maybe Var
lookupVarSet_Directly VarSet
in_scope Unique
uniq
unionInScope :: InScopeSet -> InScopeSet -> InScopeSet
unionInScope :: InScopeSet -> InScopeSet -> InScopeSet
unionInScope (InScope VarSet
s1) (InScope VarSet
s2)
= VarSet -> InScopeSet
InScope (VarSet
s1 VarSet -> VarSet -> VarSet
`unionVarSet` VarSet
s2)
varSetInScope :: VarSet -> InScopeSet -> Bool
varSetInScope :: VarSet -> InScopeSet -> Bool
varSetInScope VarSet
vars (InScope VarSet
s1) = VarSet
vars VarSet -> VarSet -> Bool
`subVarSet` VarSet
s1
uniqAway :: InScopeSet -> Var -> Var
uniqAway :: InScopeSet -> Var -> Var
uniqAway InScopeSet
in_scope Var
var
| Var
var Var -> InScopeSet -> Bool
`elemInScopeSet` InScopeSet
in_scope = InScopeSet -> Var -> Var
uniqAway' InScopeSet
in_scope Var
var
| Bool
otherwise = Var
var
uniqAway' :: InScopeSet -> Var -> Var
uniqAway' :: InScopeSet -> Var -> Var
uniqAway' InScopeSet
in_scope Var
var
= Var -> Unique -> Var
setVarUnique Var
var (InScopeSet -> Unique
unsafeGetFreshLocalUnique InScopeSet
in_scope)
unsafeGetFreshLocalUnique :: InScopeSet -> Unique
unsafeGetFreshLocalUnique :: InScopeSet -> Unique
unsafeGetFreshLocalUnique (InScope VarSet
set)
| Just (Key
uniq,Var
_) <- Key -> IntMap Var -> Maybe (Key, Var)
forall a. Key -> IntMap a -> Maybe (Key, a)
IntMap.lookupLT (Unique -> Key
getKey Unique
maxLocalUnique) (UniqFM Var -> IntMap Var
forall elt. UniqFM elt -> IntMap elt
ufmToIntMap (UniqFM Var -> IntMap Var) -> UniqFM Var -> IntMap Var
forall a b. (a -> b) -> a -> b
$ VarSet -> UniqFM Var
forall a. UniqSet a -> UniqFM a
getUniqSet VarSet
set)
, let uniq' :: Unique
uniq' = Key -> Unique
mkLocalUnique Key
uniq
, Bool -> Bool
not (Bool -> Bool) -> Bool -> Bool
forall a b. (a -> b) -> a -> b
$ Unique
uniq' Unique -> Unique -> Bool
`ltUnique` Unique
minLocalUnique
= Unique -> Unique
incrUnique Unique
uniq'
| Bool
otherwise
= Unique
minLocalUnique
data RnEnv2
= RV2 { RnEnv2 -> UniqFM Var
envL :: VarEnv Var
, RnEnv2 -> UniqFM Var
envR :: VarEnv Var
, RnEnv2 -> InScopeSet
in_scope :: InScopeSet }
mkRnEnv2 :: InScopeSet -> RnEnv2
mkRnEnv2 :: InScopeSet -> RnEnv2
mkRnEnv2 InScopeSet
vars = RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var
forall a. VarEnv a
emptyVarEnv
, envR :: UniqFM Var
envR = UniqFM Var
forall a. VarEnv a
emptyVarEnv
, in_scope :: InScopeSet
in_scope = InScopeSet
vars }
addRnInScopeSet :: RnEnv2 -> VarSet -> RnEnv2
addRnInScopeSet :: RnEnv2 -> VarSet -> RnEnv2
addRnInScopeSet RnEnv2
env VarSet
vs
| VarSet -> Bool
isEmptyVarSet VarSet
vs = RnEnv2
env
| Bool
otherwise = RnEnv2
env { in_scope :: InScopeSet
in_scope = InScopeSet -> VarSet -> InScopeSet
extendInScopeSetSet (RnEnv2 -> InScopeSet
in_scope RnEnv2
env) VarSet
vs }
rnInScope :: Var -> RnEnv2 -> Bool
rnInScope :: Var -> RnEnv2 -> Bool
rnInScope Var
x RnEnv2
env = Var
x Var -> InScopeSet -> Bool
`elemInScopeSet` RnEnv2 -> InScopeSet
in_scope RnEnv2
env
rnInScopeSet :: RnEnv2 -> InScopeSet
rnInScopeSet :: RnEnv2 -> InScopeSet
rnInScopeSet = RnEnv2 -> InScopeSet
in_scope
rnEnvL :: RnEnv2 -> VarEnv Var
rnEnvL :: RnEnv2 -> UniqFM Var
rnEnvL = RnEnv2 -> UniqFM Var
envL
rnEnvR :: RnEnv2 -> VarEnv Var
rnEnvR :: RnEnv2 -> UniqFM Var
rnEnvR = RnEnv2 -> UniqFM Var
envR
rnBndrs2 :: RnEnv2 -> [Var] -> [Var] -> RnEnv2
rnBndrs2 :: RnEnv2 -> [Var] -> [Var] -> RnEnv2
rnBndrs2 RnEnv2
env [Var]
bsL [Var]
bsR = (RnEnv2 -> Var -> Var -> RnEnv2)
-> RnEnv2 -> [Var] -> [Var] -> RnEnv2
forall acc a b. (acc -> a -> b -> acc) -> acc -> [a] -> [b] -> acc
foldl2 RnEnv2 -> Var -> Var -> RnEnv2
rnBndr2 RnEnv2
env [Var]
bsL [Var]
bsR
rnBndr2 :: RnEnv2 -> Var -> Var -> RnEnv2
rnBndr2 :: RnEnv2 -> Var -> Var -> RnEnv2
rnBndr2 RnEnv2
env Var
bL Var
bR = (RnEnv2, Var) -> RnEnv2
forall a b. (a, b) -> a
fst ((RnEnv2, Var) -> RnEnv2) -> (RnEnv2, Var) -> RnEnv2
forall a b. (a -> b) -> a -> b
$ RnEnv2 -> Var -> Var -> (RnEnv2, Var)
rnBndr2_var RnEnv2
env Var
bL Var
bR
rnBndr2_var :: RnEnv2 -> Var -> Var -> (RnEnv2, Var)
rnBndr2_var :: RnEnv2 -> Var -> Var -> (RnEnv2, Var)
rnBndr2_var (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
bL Var
bR
= (RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envL Var
bL Var
new_b
, envR :: UniqFM Var
envR = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envR Var
bR Var
new_b
, in_scope :: InScopeSet
in_scope = InScopeSet -> Var -> InScopeSet
extendInScopeSet InScopeSet
in_scope Var
new_b }, Var
new_b)
where
new_b :: Var
new_b | Bool -> Bool
not (Var
bL Var -> InScopeSet -> Bool
`elemInScopeSet` InScopeSet
in_scope) = Var
bL
| Bool -> Bool
not (Var
bR Var -> InScopeSet -> Bool
`elemInScopeSet` InScopeSet
in_scope) = Var
bR
| Bool
otherwise = InScopeSet -> Var -> Var
uniqAway' InScopeSet
in_scope Var
bL
rnBndrL :: RnEnv2 -> Var -> (RnEnv2, Var)
rnBndrL :: RnEnv2 -> Var -> (RnEnv2, Var)
rnBndrL (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
bL
= (RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envL Var
bL Var
new_b
, envR :: UniqFM Var
envR = UniqFM Var
envR
, in_scope :: InScopeSet
in_scope = InScopeSet -> Var -> InScopeSet
extendInScopeSet InScopeSet
in_scope Var
new_b }, Var
new_b)
where
new_b :: Var
new_b = InScopeSet -> Var -> Var
uniqAway InScopeSet
in_scope Var
bL
rnBndrR :: RnEnv2 -> Var -> (RnEnv2, Var)
rnBndrR :: RnEnv2 -> Var -> (RnEnv2, Var)
rnBndrR (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
bR
= (RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envR :: UniqFM Var
envR = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envR Var
bR Var
new_b
, envL :: UniqFM Var
envL = UniqFM Var
envL
, in_scope :: InScopeSet
in_scope = InScopeSet -> Var -> InScopeSet
extendInScopeSet InScopeSet
in_scope Var
new_b }, Var
new_b)
where
new_b :: Var
new_b = InScopeSet -> Var -> Var
uniqAway InScopeSet
in_scope Var
bR
rnEtaL :: RnEnv2 -> Var -> (RnEnv2, Var)
rnEtaL :: RnEnv2 -> Var -> (RnEnv2, Var)
rnEtaL (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
bL
= (RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envL Var
bL Var
new_b
, envR :: UniqFM Var
envR = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envR Var
new_b Var
new_b
, in_scope :: InScopeSet
in_scope = InScopeSet -> Var -> InScopeSet
extendInScopeSet InScopeSet
in_scope Var
new_b }, Var
new_b)
where
new_b :: Var
new_b = InScopeSet -> Var -> Var
uniqAway InScopeSet
in_scope Var
bL
rnEtaR :: RnEnv2 -> Var -> (RnEnv2, Var)
rnEtaR :: RnEnv2 -> Var -> (RnEnv2, Var)
rnEtaR (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
bR
= (RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envL Var
new_b Var
new_b
, envR :: UniqFM Var
envR = UniqFM Var -> Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv UniqFM Var
envR Var
bR Var
new_b
, in_scope :: InScopeSet
in_scope = InScopeSet -> Var -> InScopeSet
extendInScopeSet InScopeSet
in_scope Var
new_b }, Var
new_b)
where
new_b :: Var
new_b = InScopeSet -> Var -> Var
uniqAway InScopeSet
in_scope Var
bR
delBndrL, delBndrR :: RnEnv2 -> Var -> RnEnv2
delBndrL :: RnEnv2 -> Var -> RnEnv2
delBndrL rn :: RnEnv2
rn@(RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
env, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
v
= RnEnv2
rn { envL :: UniqFM Var
envL = UniqFM Var
env UniqFM Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> VarEnv a
`delVarEnv` Var
v, in_scope :: InScopeSet
in_scope = InScopeSet
in_scope InScopeSet -> Var -> InScopeSet
`extendInScopeSet` Var
v }
delBndrR :: RnEnv2 -> Var -> RnEnv2
delBndrR rn :: RnEnv2
rn@(RV2 { envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
env, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) Var
v
= RnEnv2
rn { envR :: UniqFM Var
envR = UniqFM Var
env UniqFM Var -> Var -> UniqFM Var
forall a. VarEnv a -> Var -> VarEnv a
`delVarEnv` Var
v, in_scope :: InScopeSet
in_scope = InScopeSet
in_scope InScopeSet -> Var -> InScopeSet
`extendInScopeSet` Var
v }
delBndrsL, delBndrsR :: RnEnv2 -> [Var] -> RnEnv2
delBndrsL :: RnEnv2 -> [Var] -> RnEnv2
delBndrsL rn :: RnEnv2
rn@(RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
env, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) [Var]
v
= RnEnv2
rn { envL :: UniqFM Var
envL = UniqFM Var
env UniqFM Var -> [Var] -> UniqFM Var
forall a. VarEnv a -> [Var] -> VarEnv a
`delVarEnvList` [Var]
v, in_scope :: InScopeSet
in_scope = InScopeSet
in_scope InScopeSet -> [Var] -> InScopeSet
`extendInScopeSetList` [Var]
v }
delBndrsR :: RnEnv2 -> [Var] -> RnEnv2
delBndrsR rn :: RnEnv2
rn@(RV2 { envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
env, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope }) [Var]
v
= RnEnv2
rn { envR :: UniqFM Var
envR = UniqFM Var
env UniqFM Var -> [Var] -> UniqFM Var
forall a. VarEnv a -> [Var] -> VarEnv a
`delVarEnvList` [Var]
v, in_scope :: InScopeSet
in_scope = InScopeSet
in_scope InScopeSet -> [Var] -> InScopeSet
`extendInScopeSetList` [Var]
v }
rnOccL, rnOccR :: RnEnv2 -> Var -> Var
rnOccL :: RnEnv2 -> Var -> Var
rnOccL (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
env }) Var
v = UniqFM Var -> Var -> Maybe Var
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv UniqFM Var
env Var
v Maybe Var -> Var -> Var
forall a. Maybe a -> a -> a
`orElse` Var
v
rnOccR :: RnEnv2 -> Var -> Var
rnOccR (RV2 { envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
env }) Var
v = UniqFM Var -> Var -> Maybe Var
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv UniqFM Var
env Var
v Maybe Var -> Var -> Var
forall a. Maybe a -> a -> a
`orElse` Var
v
rnOccL_maybe, rnOccR_maybe :: RnEnv2 -> Var -> Maybe Var
rnOccL_maybe :: RnEnv2 -> Var -> Maybe Var
rnOccL_maybe (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
env }) Var
v = UniqFM Var -> Var -> Maybe Var
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv UniqFM Var
env Var
v
rnOccR_maybe :: RnEnv2 -> Var -> Maybe Var
rnOccR_maybe (RV2 { envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
env }) Var
v = UniqFM Var -> Var -> Maybe Var
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv UniqFM Var
env Var
v
inRnEnvL, inRnEnvR :: RnEnv2 -> Var -> Bool
inRnEnvL :: RnEnv2 -> Var -> Bool
inRnEnvL (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
env }) Var
v = Var
v Var -> UniqFM Var -> Bool
forall a. Var -> VarEnv a -> Bool
`elemVarEnv` UniqFM Var
env
inRnEnvR :: RnEnv2 -> Var -> Bool
inRnEnvR (RV2 { envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
env }) Var
v = Var
v Var -> UniqFM Var -> Bool
forall a. Var -> VarEnv a -> Bool
`elemVarEnv` UniqFM Var
env
lookupRnInScope :: RnEnv2 -> Var -> Var
lookupRnInScope :: RnEnv2 -> Var -> Var
lookupRnInScope RnEnv2
env Var
v = InScopeSet -> Var -> Maybe Var
lookupInScope (RnEnv2 -> InScopeSet
in_scope RnEnv2
env) Var
v Maybe Var -> Var -> Var
forall a. Maybe a -> a -> a
`orElse` Var
v
nukeRnEnvL, nukeRnEnvR :: RnEnv2 -> RnEnv2
nukeRnEnvL :: RnEnv2 -> RnEnv2
nukeRnEnvL RnEnv2
env = RnEnv2
env { envL :: UniqFM Var
envL = UniqFM Var
forall a. VarEnv a
emptyVarEnv }
nukeRnEnvR :: RnEnv2 -> RnEnv2
nukeRnEnvR RnEnv2
env = RnEnv2
env { envR :: UniqFM Var
envR = UniqFM Var
forall a. VarEnv a
emptyVarEnv }
rnSwap :: RnEnv2 -> RnEnv2
rnSwap :: RnEnv2 -> RnEnv2
rnSwap (RV2 { envL :: RnEnv2 -> UniqFM Var
envL = UniqFM Var
envL, envR :: RnEnv2 -> UniqFM Var
envR = UniqFM Var
envR, in_scope :: RnEnv2 -> InScopeSet
in_scope = InScopeSet
in_scope })
= RV2 :: UniqFM Var -> UniqFM Var -> InScopeSet -> RnEnv2
RV2 { envL :: UniqFM Var
envL = UniqFM Var
envR, envR :: UniqFM Var
envR = UniqFM Var
envL, in_scope :: InScopeSet
in_scope = InScopeSet
in_scope }
type TidyEnv = (TidyOccEnv, VarEnv Var)
emptyTidyEnv :: TidyEnv
emptyTidyEnv :: TidyEnv
emptyTidyEnv = (TidyOccEnv
emptyTidyOccEnv, UniqFM Var
forall a. VarEnv a
emptyVarEnv)
mkEmptyTidyEnv :: TidyOccEnv -> TidyEnv
mkEmptyTidyEnv :: TidyOccEnv -> TidyEnv
mkEmptyTidyEnv TidyOccEnv
occ_env = (TidyOccEnv
occ_env, UniqFM Var
forall a. VarEnv a
emptyVarEnv)
delTidyEnvList :: TidyEnv -> [Var] -> TidyEnv
delTidyEnvList :: TidyEnv -> [Var] -> TidyEnv
delTidyEnvList (TidyOccEnv
occ_env, UniqFM Var
var_env) [Var]
vs = (TidyOccEnv
occ_env', UniqFM Var
var_env')
where
occ_env' :: TidyOccEnv
occ_env' = TidyOccEnv
occ_env TidyOccEnv -> [FastString] -> TidyOccEnv
`delTidyOccEnvList` (Var -> FastString) -> [Var] -> [FastString]
forall a b. (a -> b) -> [a] -> [b]
map (OccName -> FastString
occNameFS (OccName -> FastString) -> (Var -> OccName) -> Var -> FastString
forall b c a. (b -> c) -> (a -> b) -> a -> c
. Var -> OccName
forall a. NamedThing a => a -> OccName
External instance of the constraint type NamedThing Var
getOccName) [Var]
vs
var_env' :: UniqFM Var
var_env' = UniqFM Var
var_env UniqFM Var -> [Var] -> UniqFM Var
forall a. VarEnv a -> [Var] -> VarEnv a
`delVarEnvList` [Var]
vs
type VarEnv elt = UniqFM elt
type IdEnv elt = VarEnv elt
type TyVarEnv elt = VarEnv elt
type TyCoVarEnv elt = VarEnv elt
type CoVarEnv elt = VarEnv elt
emptyVarEnv :: VarEnv a
mkVarEnv :: [(Var, a)] -> VarEnv a
mkVarEnv_Directly :: [(Unique, a)] -> VarEnv a
zipVarEnv :: [Var] -> [a] -> VarEnv a
unitVarEnv :: Var -> a -> VarEnv a
alterVarEnv :: (Maybe a -> Maybe a) -> VarEnv a -> Var -> VarEnv a
extendVarEnv :: VarEnv a -> Var -> a -> VarEnv a
extendVarEnv_C :: (a->a->a) -> VarEnv a -> Var -> a -> VarEnv a
extendVarEnv_Acc :: (a->b->b) -> (a->b) -> VarEnv b -> Var -> a -> VarEnv b
plusVarEnv :: VarEnv a -> VarEnv a -> VarEnv a
plusVarEnvList :: [VarEnv a] -> VarEnv a
extendVarEnvList :: VarEnv a -> [(Var, a)] -> VarEnv a
partitionVarEnv :: (a -> Bool) -> VarEnv a -> (VarEnv a, VarEnv a)
restrictVarEnv :: VarEnv a -> VarSet -> VarEnv a
delVarEnvList :: VarEnv a -> [Var] -> VarEnv a
delVarEnv :: VarEnv a -> Var -> VarEnv a
minusVarEnv :: VarEnv a -> VarEnv b -> VarEnv a
plusVarEnv_C :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
plusVarEnv_CD :: (a -> a -> a) -> VarEnv a -> a -> VarEnv a -> a -> VarEnv a
plusMaybeVarEnv_C :: (a -> a -> Maybe a) -> VarEnv a -> VarEnv a -> VarEnv a
mapVarEnv :: (a -> b) -> VarEnv a -> VarEnv b
modifyVarEnv :: (a -> a) -> VarEnv a -> Var -> VarEnv a
isEmptyVarEnv :: VarEnv a -> Bool
lookupVarEnv :: VarEnv a -> Var -> Maybe a
filterVarEnv :: (a -> Bool) -> VarEnv a -> VarEnv a
lookupVarEnv_NF :: VarEnv a -> Var -> a
lookupWithDefaultVarEnv :: VarEnv a -> a -> Var -> a
elemVarEnv :: Var -> VarEnv a -> Bool
elemVarEnvByKey :: Unique -> VarEnv a -> Bool
disjointVarEnv :: VarEnv a -> VarEnv a -> Bool
elemVarEnv :: Var -> VarEnv a -> Bool
elemVarEnv = Var -> VarEnv a -> Bool
forall key elt. Uniquable key => key -> UniqFM elt -> Bool
External instance of the constraint type Uniquable Var
elemUFM
elemVarEnvByKey :: Unique -> VarEnv a -> Bool
elemVarEnvByKey = Unique -> VarEnv a -> Bool
forall elt. Unique -> UniqFM elt -> Bool
elemUFM_Directly
disjointVarEnv :: VarEnv a -> VarEnv a -> Bool
disjointVarEnv = VarEnv a -> VarEnv a -> Bool
forall elt1 elt2. UniqFM elt1 -> UniqFM elt2 -> Bool
disjointUFM
alterVarEnv :: (Maybe a -> Maybe a) -> VarEnv a -> Var -> VarEnv a
alterVarEnv = (Maybe a -> Maybe a) -> VarEnv a -> Var -> VarEnv a
forall key elt.
Uniquable key =>
(Maybe elt -> Maybe elt) -> UniqFM elt -> key -> UniqFM elt
External instance of the constraint type Uniquable Var
alterUFM
extendVarEnv :: VarEnv a -> Var -> a -> VarEnv a
extendVarEnv = VarEnv a -> Var -> a -> VarEnv a
forall key elt.
Uniquable key =>
UniqFM elt -> key -> elt -> UniqFM elt
External instance of the constraint type Uniquable Var
addToUFM
extendVarEnv_C :: (a -> a -> a) -> VarEnv a -> Var -> a -> VarEnv a
extendVarEnv_C = (a -> a -> a) -> VarEnv a -> Var -> a -> VarEnv a
forall key elt.
Uniquable key =>
(elt -> elt -> elt) -> UniqFM elt -> key -> elt -> UniqFM elt
External instance of the constraint type Uniquable Var
addToUFM_C
extendVarEnv_Acc :: (a -> b -> b) -> (a -> b) -> VarEnv b -> Var -> a -> VarEnv b
extendVarEnv_Acc = (a -> b -> b) -> (a -> b) -> VarEnv b -> Var -> a -> VarEnv b
forall key elt elts.
Uniquable key =>
(elt -> elts -> elts)
-> (elt -> elts) -> UniqFM elts -> key -> elt -> UniqFM elts
External instance of the constraint type Uniquable Var
addToUFM_Acc
extendVarEnvList :: VarEnv a -> [(Var, a)] -> VarEnv a
extendVarEnvList = VarEnv a -> [(Var, a)] -> VarEnv a
forall key elt.
Uniquable key =>
UniqFM elt -> [(key, elt)] -> UniqFM elt
External instance of the constraint type Uniquable Var
addListToUFM
plusVarEnv_C :: (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
plusVarEnv_C = (a -> a -> a) -> VarEnv a -> VarEnv a -> VarEnv a
forall elt.
(elt -> elt -> elt) -> UniqFM elt -> UniqFM elt -> UniqFM elt
plusUFM_C
plusVarEnv_CD :: (a -> a -> a) -> VarEnv a -> a -> VarEnv a -> a -> VarEnv a
plusVarEnv_CD = (a -> a -> a) -> VarEnv a -> a -> VarEnv a -> a -> VarEnv a
forall elt.
(elt -> elt -> elt)
-> UniqFM elt -> elt -> UniqFM elt -> elt -> UniqFM elt
plusUFM_CD
plusMaybeVarEnv_C :: (a -> a -> Maybe a) -> VarEnv a -> VarEnv a -> VarEnv a
plusMaybeVarEnv_C = (a -> a -> Maybe a) -> VarEnv a -> VarEnv a -> VarEnv a
forall elt.
(elt -> elt -> Maybe elt) -> UniqFM elt -> UniqFM elt -> UniqFM elt
plusMaybeUFM_C
delVarEnvList :: VarEnv a -> [Var] -> VarEnv a
delVarEnvList = VarEnv a -> [Var] -> VarEnv a
forall key elt. Uniquable key => UniqFM elt -> [key] -> UniqFM elt
External instance of the constraint type Uniquable Var
delListFromUFM
delVarEnv :: VarEnv a -> Var -> VarEnv a
delVarEnv = VarEnv a -> Var -> VarEnv a
forall key elt. Uniquable key => UniqFM elt -> key -> UniqFM elt
External instance of the constraint type Uniquable Var
delFromUFM
minusVarEnv :: VarEnv a -> VarEnv b -> VarEnv a
minusVarEnv = VarEnv a -> VarEnv b -> VarEnv a
forall elt1 elt2. UniqFM elt1 -> UniqFM elt2 -> UniqFM elt1
minusUFM
plusVarEnv :: VarEnv a -> VarEnv a -> VarEnv a
plusVarEnv = VarEnv a -> VarEnv a -> VarEnv a
forall elt. UniqFM elt -> UniqFM elt -> UniqFM elt
plusUFM
plusVarEnvList :: [VarEnv a] -> VarEnv a
plusVarEnvList = [VarEnv a] -> VarEnv a
forall elt. [UniqFM elt] -> UniqFM elt
plusUFMList
lookupVarEnv :: VarEnv a -> Var -> Maybe a
lookupVarEnv = VarEnv a -> Var -> Maybe a
forall key elt. Uniquable key => UniqFM elt -> key -> Maybe elt
External instance of the constraint type Uniquable Var
lookupUFM
filterVarEnv :: (a -> Bool) -> VarEnv a -> VarEnv a
filterVarEnv = (a -> Bool) -> VarEnv a -> VarEnv a
forall elt. (elt -> Bool) -> UniqFM elt -> UniqFM elt
filterUFM
lookupWithDefaultVarEnv :: VarEnv a -> a -> Var -> a
lookupWithDefaultVarEnv = VarEnv a -> a -> Var -> a
forall key elt. Uniquable key => UniqFM elt -> elt -> key -> elt
External instance of the constraint type Uniquable Var
lookupWithDefaultUFM
mapVarEnv :: (a -> b) -> VarEnv a -> VarEnv b
mapVarEnv = (a -> b) -> VarEnv a -> VarEnv b
forall elt1 elt2. (elt1 -> elt2) -> UniqFM elt1 -> UniqFM elt2
mapUFM
mkVarEnv :: [(Var, a)] -> VarEnv a
mkVarEnv = [(Var, a)] -> VarEnv a
forall key elt. Uniquable key => [(key, elt)] -> UniqFM elt
External instance of the constraint type Uniquable Var
listToUFM
mkVarEnv_Directly :: [(Unique, a)] -> VarEnv a
mkVarEnv_Directly= [(Unique, a)] -> VarEnv a
forall elt. [(Unique, elt)] -> UniqFM elt
listToUFM_Directly
emptyVarEnv :: VarEnv a
emptyVarEnv = VarEnv a
forall a. VarEnv a
emptyUFM
unitVarEnv :: Var -> a -> VarEnv a
unitVarEnv = Var -> a -> VarEnv a
forall key elt. Uniquable key => key -> elt -> UniqFM elt
External instance of the constraint type Uniquable Var
unitUFM
isEmptyVarEnv :: VarEnv a -> Bool
isEmptyVarEnv = VarEnv a -> Bool
forall elt. UniqFM elt -> Bool
isNullUFM
partitionVarEnv :: (a -> Bool) -> VarEnv a -> (VarEnv a, VarEnv a)
partitionVarEnv = (a -> Bool) -> VarEnv a -> (VarEnv a, VarEnv a)
forall elt. (elt -> Bool) -> UniqFM elt -> (UniqFM elt, UniqFM elt)
partitionUFM
restrictVarEnv :: VarEnv a -> VarSet -> VarEnv a
restrictVarEnv VarEnv a
env VarSet
vs = (Unique -> a -> Bool) -> VarEnv a -> VarEnv a
forall elt. (Unique -> elt -> Bool) -> UniqFM elt -> UniqFM elt
filterUFM_Directly Unique -> a -> Bool
forall {p}. Unique -> p -> Bool
keep VarEnv a
env
where
keep :: Unique -> p -> Bool
keep Unique
u p
_ = Unique
u Unique -> VarSet -> Bool
`elemVarSetByKey` VarSet
vs
zipVarEnv :: [Var] -> [a] -> VarEnv a
zipVarEnv [Var]
tyvars [a]
tys = [(Var, a)] -> VarEnv a
forall a. [(Var, a)] -> VarEnv a
mkVarEnv (String -> [Var] -> [a] -> [(Var, a)]
forall a b. String -> [a] -> [b] -> [(a, b)]
zipEqual String
"zipVarEnv" [Var]
tyvars [a]
tys)
lookupVarEnv_NF :: VarEnv a -> Var -> a
lookupVarEnv_NF VarEnv a
env Var
id = case VarEnv a -> Var -> Maybe a
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv VarEnv a
env Var
id of
Just a
xx -> a
xx
Maybe a
Nothing -> String -> a
forall a. String -> a
panic String
"lookupVarEnv_NF: Nothing"
modifyVarEnv :: (a -> a) -> VarEnv a -> Var -> VarEnv a
modifyVarEnv a -> a
mangle_fn VarEnv a
env Var
key
= case (VarEnv a -> Var -> Maybe a
forall a. VarEnv a -> Var -> Maybe a
lookupVarEnv VarEnv a
env Var
key) of
Maybe a
Nothing -> VarEnv a
env
Just a
xx -> VarEnv a -> Var -> a -> VarEnv a
forall a. VarEnv a -> Var -> a -> VarEnv a
extendVarEnv VarEnv a
env Var
key (a -> a
mangle_fn a
xx)
modifyVarEnv_Directly :: (a -> a) -> UniqFM a -> Unique -> UniqFM a
modifyVarEnv_Directly :: (a -> a) -> UniqFM a -> Unique -> UniqFM a
modifyVarEnv_Directly a -> a
mangle_fn UniqFM a
env Unique
key
= case (UniqFM a -> Unique -> Maybe a
forall elt. UniqFM elt -> Unique -> Maybe elt
lookupUFM_Directly UniqFM a
env Unique
key) of
Maybe a
Nothing -> UniqFM a
env
Just a
xx -> UniqFM a -> Unique -> a -> UniqFM a
forall elt. UniqFM elt -> Unique -> elt -> UniqFM elt
addToUFM_Directly UniqFM a
env Unique
key (a -> a
mangle_fn a
xx)
type DVarEnv elt = UniqDFM elt
type DIdEnv elt = DVarEnv elt
type DTyVarEnv elt = DVarEnv elt
emptyDVarEnv :: DVarEnv a
emptyDVarEnv :: DVarEnv a
emptyDVarEnv = DVarEnv a
forall elt. UniqDFM elt
emptyUDFM
dVarEnvElts :: DVarEnv a -> [a]
dVarEnvElts :: DVarEnv a -> [a]
dVarEnvElts = DVarEnv a -> [a]
forall elt. UniqDFM elt -> [elt]
eltsUDFM
mkDVarEnv :: [(Var, a)] -> DVarEnv a
mkDVarEnv :: [(Var, a)] -> DVarEnv a
mkDVarEnv = [(Var, a)] -> DVarEnv a
forall key elt. Uniquable key => [(key, elt)] -> UniqDFM elt
External instance of the constraint type Uniquable Var
listToUDFM
extendDVarEnv :: DVarEnv a -> Var -> a -> DVarEnv a
extendDVarEnv :: DVarEnv a -> Var -> a -> DVarEnv a
extendDVarEnv = DVarEnv a -> Var -> a -> DVarEnv a
forall key elt.
Uniquable key =>
UniqDFM elt -> key -> elt -> UniqDFM elt
External instance of the constraint type Uniquable Var
addToUDFM
minusDVarEnv :: DVarEnv a -> DVarEnv a' -> DVarEnv a
minusDVarEnv :: DVarEnv a -> DVarEnv a' -> DVarEnv a
minusDVarEnv = DVarEnv a -> DVarEnv a' -> DVarEnv a
forall elt1 elt2. UniqDFM elt1 -> UniqDFM elt2 -> UniqDFM elt1
minusUDFM
lookupDVarEnv :: DVarEnv a -> Var -> Maybe a
lookupDVarEnv :: DVarEnv a -> Var -> Maybe a
lookupDVarEnv = DVarEnv a -> Var -> Maybe a
forall key elt. Uniquable key => UniqDFM elt -> key -> Maybe elt
External instance of the constraint type Uniquable Var
lookupUDFM
foldDVarEnv :: (a -> b -> b) -> b -> DVarEnv a -> b
foldDVarEnv :: (a -> b -> b) -> b -> DVarEnv a -> b
foldDVarEnv = (a -> b -> b) -> b -> DVarEnv a -> b
forall elt a. (elt -> a -> a) -> a -> UniqDFM elt -> a
foldUDFM
nonDetStrictFoldDVarEnv :: (a -> b -> b) -> b -> DVarEnv a -> b
nonDetStrictFoldDVarEnv :: (a -> b -> b) -> b -> DVarEnv a -> b
nonDetStrictFoldDVarEnv = (a -> b -> b) -> b -> DVarEnv a -> b
forall elt a. (elt -> a -> a) -> a -> UniqDFM elt -> a
nonDetStrictFoldUDFM
mapDVarEnv :: (a -> b) -> DVarEnv a -> DVarEnv b
mapDVarEnv :: (a -> b) -> DVarEnv a -> DVarEnv b
mapDVarEnv = (a -> b) -> DVarEnv a -> DVarEnv b
forall elt1 elt2. (elt1 -> elt2) -> UniqDFM elt1 -> UniqDFM elt2
mapUDFM
filterDVarEnv :: (a -> Bool) -> DVarEnv a -> DVarEnv a
filterDVarEnv :: (a -> Bool) -> DVarEnv a -> DVarEnv a
filterDVarEnv = (a -> Bool) -> DVarEnv a -> DVarEnv a
forall elt. (elt -> Bool) -> UniqDFM elt -> UniqDFM elt
filterUDFM
alterDVarEnv :: (Maybe a -> Maybe a) -> DVarEnv a -> Var -> DVarEnv a
alterDVarEnv :: (Maybe a -> Maybe a) -> DVarEnv a -> Var -> DVarEnv a
alterDVarEnv = (Maybe a -> Maybe a) -> DVarEnv a -> Var -> DVarEnv a
forall key elt.
Uniquable key =>
(Maybe elt -> Maybe elt) -> UniqDFM elt -> key -> UniqDFM elt
External instance of the constraint type Uniquable Var
alterUDFM
plusDVarEnv :: DVarEnv a -> DVarEnv a -> DVarEnv a
plusDVarEnv :: DVarEnv a -> DVarEnv a -> DVarEnv a
plusDVarEnv = DVarEnv a -> DVarEnv a -> DVarEnv a
forall elt. UniqDFM elt -> UniqDFM elt -> UniqDFM elt
plusUDFM
plusDVarEnv_C :: (a -> a -> a) -> DVarEnv a -> DVarEnv a -> DVarEnv a
plusDVarEnv_C :: (a -> a -> a) -> DVarEnv a -> DVarEnv a -> DVarEnv a
plusDVarEnv_C = (a -> a -> a) -> DVarEnv a -> DVarEnv a -> DVarEnv a
forall elt.
(elt -> elt -> elt) -> UniqDFM elt -> UniqDFM elt -> UniqDFM elt
plusUDFM_C
unitDVarEnv :: Var -> a -> DVarEnv a
unitDVarEnv :: Var -> a -> DVarEnv a
unitDVarEnv = Var -> a -> DVarEnv a
forall key elt. Uniquable key => key -> elt -> UniqDFM elt
External instance of the constraint type Uniquable Var
unitUDFM
delDVarEnv :: DVarEnv a -> Var -> DVarEnv a
delDVarEnv :: DVarEnv a -> Var -> DVarEnv a
delDVarEnv = DVarEnv a -> Var -> DVarEnv a
forall key elt. Uniquable key => UniqDFM elt -> key -> UniqDFM elt
External instance of the constraint type Uniquable Var
delFromUDFM
delDVarEnvList :: DVarEnv a -> [Var] -> DVarEnv a
delDVarEnvList :: DVarEnv a -> [Var] -> DVarEnv a
delDVarEnvList = DVarEnv a -> [Var] -> DVarEnv a
forall key elt.
Uniquable key =>
UniqDFM elt -> [key] -> UniqDFM elt
External instance of the constraint type Uniquable Var
delListFromUDFM
isEmptyDVarEnv :: DVarEnv a -> Bool
isEmptyDVarEnv :: DVarEnv a -> Bool
isEmptyDVarEnv = DVarEnv a -> Bool
forall elt. UniqDFM elt -> Bool
isNullUDFM
elemDVarEnv :: Var -> DVarEnv a -> Bool
elemDVarEnv :: Var -> DVarEnv a -> Bool
elemDVarEnv = Var -> DVarEnv a -> Bool
forall key elt. Uniquable key => key -> UniqDFM elt -> Bool
External instance of the constraint type Uniquable Var
elemUDFM
extendDVarEnv_C :: (a -> a -> a) -> DVarEnv a -> Var -> a -> DVarEnv a
extendDVarEnv_C :: (a -> a -> a) -> DVarEnv a -> Var -> a -> DVarEnv a
extendDVarEnv_C = (a -> a -> a) -> DVarEnv a -> Var -> a -> DVarEnv a
forall key elt.
Uniquable key =>
(elt -> elt -> elt) -> UniqDFM elt -> key -> elt -> UniqDFM elt
External instance of the constraint type Uniquable Var
addToUDFM_C
modifyDVarEnv :: (a -> a) -> DVarEnv a -> Var -> DVarEnv a
modifyDVarEnv :: (a -> a) -> DVarEnv a -> Var -> DVarEnv a
modifyDVarEnv a -> a
mangle_fn DVarEnv a
env Var
key
= case (DVarEnv a -> Var -> Maybe a
forall a. DVarEnv a -> Var -> Maybe a
lookupDVarEnv DVarEnv a
env Var
key) of
Maybe a
Nothing -> DVarEnv a
env
Just a
xx -> DVarEnv a -> Var -> a -> DVarEnv a
forall a. DVarEnv a -> Var -> a -> DVarEnv a
extendDVarEnv DVarEnv a
env Var
key (a -> a
mangle_fn a
xx)
partitionDVarEnv :: (a -> Bool) -> DVarEnv a -> (DVarEnv a, DVarEnv a)
partitionDVarEnv :: (a -> Bool) -> DVarEnv a -> (DVarEnv a, DVarEnv a)
partitionDVarEnv = (a -> Bool) -> DVarEnv a -> (DVarEnv a, DVarEnv a)
forall elt.
(elt -> Bool) -> UniqDFM elt -> (UniqDFM elt, UniqDFM elt)
partitionUDFM
extendDVarEnvList :: DVarEnv a -> [(Var, a)] -> DVarEnv a
extendDVarEnvList :: DVarEnv a -> [(Var, a)] -> DVarEnv a
extendDVarEnvList = DVarEnv a -> [(Var, a)] -> DVarEnv a
forall key elt.
Uniquable key =>
UniqDFM elt -> [(key, elt)] -> UniqDFM elt
External instance of the constraint type Uniquable Var
addListToUDFM
anyDVarEnv :: (a -> Bool) -> DVarEnv a -> Bool
anyDVarEnv :: (a -> Bool) -> DVarEnv a -> Bool
anyDVarEnv = (a -> Bool) -> DVarEnv a -> Bool
forall elt. (elt -> Bool) -> UniqDFM elt -> Bool
anyUDFM