- Meta type variable bindings
-%* *
-%************************************************************************
-
-\begin{code}
-getTcTyVarBindsVar :: TcM (TcRef TcTyVarBinds)
-getTcTyVarBindsVar = do { env <- getLclEnv; return (tcl_tybinds env) }
-
-getTcTyVarBinds :: TcM a -> TcM (a, TcTyVarBinds)
-getTcTyVarBinds thing_inside
- = do { tybinds_var <- newMutVar emptyBag
- ; res <- updLclEnv (\ env -> env { tcl_tybinds = tybinds_var })
- thing_inside
- ; tybinds <- readMutVar tybinds_var
- ; return (res, tybinds)
- }
-
-bindMetaTyVar :: TcTyVar -> TcType -> TcM ()
-bindMetaTyVar tv ty
- = do { ASSERTM2( do { details <- readMutVar (metaTvRef tv)
- ; return (isFlexi details) }, ppr tv )
- ; tybinds_var <- getTcTyVarBindsVar
- ; tybinds <- readMutVar tybinds_var
- ; writeMutVar tybinds_var (tybinds `snocBag` TcTyVarBind tv ty)
- }
-
-getTcTyVarBindsRelation :: TcM [(TcTyVar, TcTyVarSet)]
-getTcTyVarBindsRelation
- = do { tybinds_var <- getTcTyVarBindsVar
- ; tybinds <- readMutVar tybinds_var
- ; return $ map freeTvs (bagToList tybinds)
- }
- where
- freeTvs (TcTyVarBind tv ty) = (tv, tyVarsOfType ty)
-\end{code}
-
-%************************************************************************
-%* *