-mkSysTyVar :: Unique -> Kind -> TyVar
-mkSysTyVar uniq kind = Var { varName = name
- , realUnique = getKey uniq
- , varType = kind
- , varDetails = TyVar
-#ifdef DEBUG
- , varInfo = pprPanic "mkSysTyVar" (ppr name)
-#endif
- }
- where
- name = mkSysLocalName uniq SLIT("t")
-
-newMutTyVar :: Name -> Kind -> IO TyVar
-newMutTyVar name kind =
- do loc <- newIORef Nothing
- return (Var { varName = name,
- realUnique = getKey (nameUnique name),
- varType = kind,
- varDetails = MutTyVar loc False})
-
-newSigTyVar :: Name -> Kind -> IO TyVar
-newSigTyVar name kind =
- do loc <- newIORef Nothing
- return (Var { varName = name,
- realUnique = getKey (nameUnique name),
- varType = kind,
- varDetails = MutTyVar loc True})
-
-readMutTyVar :: TyVar -> IO (Maybe Type)
-readMutTyVar (Var {varDetails = MutTyVar loc _}) = readIORef loc
-
-writeMutTyVar :: TyVar -> Maybe Type -> IO ()
-writeMutTyVar (Var {varDetails = MutTyVar loc _}) val = writeIORef loc val
-
-makeTyVarImmutable :: TyVar -> TyVar
-makeTyVarImmutable tyvar = tyvar { varDetails = TyVar}
-
-isTyVar :: Var -> Bool
-isTyVar (Var {varDetails = details}) = case details of
- TyVar -> True
- MutTyVar _ _ -> True
- other -> False
-
-isMutTyVar :: Var -> Bool
-isMutTyVar (Var {varDetails = MutTyVar _ _}) = True
-isMutTyVar other = False
-
-isSigTyVar :: Var -> Bool
-isSigTyVar (Var {varDetails = MutTyVar _ is_sig}) = is_sig
-isSigTyVar other = False
-\end{code}
-
-
-%************************************************************************
-%* *
-\subsection{Usage variables}
-%* *
-%************************************************************************
-
-\begin{code}
-type UVar = Var
-\end{code}
-
-\begin{code}
-mkUVar :: Unique -> UVar
-mkUVar unique = Var { varName = mkSysLocalName unique SLIT("u"),
- realUnique = getKey unique,
- varDetails = UVar }
-\end{code}
-
-\begin{code}
-isUVar :: Var -> Bool
-isUVar (Var {varDetails = details}) = case details of
- UVar -> True
- other -> False