(TTE
{ modName = mod_name
, declPath = []
+ , inScope = emptyVarSet
})
(TT
{ tickBoxCount = 0
, mixEntries = []
- , inScope = emptyVarSet
})
let entries = reverse $ mixEntries st
\begin{code}
data TickTransState = TT { tickBoxCount:: Int
, mixEntries :: [MixEntry]
- , inScope :: VarSet -- move the TickTransEnv
}
data TickTransEnv = TTE { modName :: String
, declPath :: [String]
+ , inScope :: VarSet
}
-- deriving Show
setState :: (TickTransState -> TickTransState) -> TM ()
setState f = TM $ \ env st -> ((), noFVs, f st)
-withState :: (TickTransState -> TickTransState) -> TM a -> TM a
-withState f (TM m) = TM $ \ env st ->
- case m env (f st) of
- (a, fvs, st') -> (a, fvs, st')
-
getEnv :: TM TickTransEnv
getEnv = TM $ \ env st -> (env, noFVs, st)
freeVar :: Id -> TM ()
freeVar id = TM $ \ env st ->
- if id `elemVarSet` inScope st
+ if id `elemVarSet` inScope env
then ((), unitOccEnv (nameOccName (idName id)) id, st)
else ((), noFVs, st)
bindLocals :: [Id] -> TM a -> TM a
bindLocals new_ids (TM m)
= TM $ \ env st ->
- case m env st{ inScope = inScope st `extendVarSetList` new_ids } of
+ case m env{ inScope = inScope env `extendVarSetList` new_ids } st of
(r, fv, st') -> (r, fv `delListFromUFM` occs, st')
where occs = [ nameOccName (idName id) | id <- new_ids ]