\begin{code}
module Var (
- Var, IdOrTyVar, VarDetails, -- Abstract
+ Var, VarDetails, -- Abstract
varName, varUnique, varInfo, varType,
setVarName, setVarUnique, setVarType, setVarOcc,
-- UVars
UVar,
isUVar,
- mkUVar,
+ mkUVar, mkNamedUVar,
-- Ids
Id, DictId,
idName, idType, idUnique, idInfo, modifyIdInfo, maybeModifyIdInfo,
- setIdName, setIdUnique, setIdInfo, lazySetIdInfo,
+ setIdName, setIdUnique, setIdInfo, lazySetIdInfo, zapIdInfo,
mkIdVar, isId, externallyVisibleId
) where
#include "HsVersions.h"
-import {-# SOURCE #-} Type( Type, Kind )
-import {-# SOURCE #-} IdInfo( IdInfo, seqIdInfo )
+import {-# SOURCE #-} TypeRep( Type, Kind )
+import {-# SOURCE #-} IdInfo( IdInfo, seqIdInfo, vanillaIdInfo )
import Unique ( Unique, Uniquable(..), mkUniqueGrimily, getKey )
import Name ( Name, OccName, NamedThing(..),
in its @VarDetails@.
\begin{code}
-type IdOrTyVar = Var
-
data Var
= Var {
varName :: Name,
mkUVar unique = Var { varName = mkSysLocalName unique SLIT("u"),
realUnique = getKey unique,
varDetails = UVar }
+
+mkNamedUVar :: Name -> UVar
+mkNamedUVar name = Var { varName = name
+ , realUnique = getKey (nameUnique name)
+ , varDetails = UVar
+#ifdef DEBUG
+ , varType = pprPanic "looking at Type of a uvar" (ppr name)
+ , varInfo = pprPanic "looking at IdInfo of a uvar" (ppr name)
+#endif
+ }
\end{code}
\begin{code}
setIdInfo var info = seqIdInfo info `seq` var {varInfo = info}
-- Try to avoid spack leaks by seq'ing
+zapIdInfo :: Id -> Id
+zapIdInfo var = var {varInfo = vanillaIdInfo}
+
modifyIdInfo :: (IdInfo -> IdInfo) -> Id -> Id
modifyIdInfo fn var@(Var {varInfo = info})
= seqIdInfo new_info `seq` var {varInfo = new_info}