-bindSubst :: Subst -> Var -> Var -> Subst
--- Extend with a substitution, v1 -> Var v2
--- and extend the in-scopes with v2
-bindSubst (Subst in_scope ids tvs) old_bndr new_bndr
- | isId old_bndr
- = Subst (in_scope `extendInScopeSet` new_bndr)
- (extendVarEnv ids old_bndr (DoneEx (Var new_bndr)))
- tvs
- | otherwise
- = Subst (in_scope `extendInScopeSet` new_bndr)
- ids
- (extendVarEnv tvs old_bndr (mkTyVarTy new_bndr))
-
-unBindSubst :: Subst -> Var -> Var -> Subst
--- Reverse the effect of bindSubst
--- If old_bndr was already in the substitution, this doesn't quite work
-unBindSubst (Subst in_scope ids tvs) old_bndr new_bndr
- = Subst (in_scope `delInScopeSet` new_bndr)
- (delVarEnv ids old_bndr)
- (delVarEnv tvs old_bndr)
-
--- And the "List" forms
-bindSubstList :: Subst -> [Var] -> [Var] -> Subst
-bindSubstList subst old_bndrs new_bndrs
- = foldl2 bindSubst subst old_bndrs new_bndrs
-
-unBindSubstList :: Subst -> [Var] -> [Var] -> Subst
-unBindSubstList subst old_bndrs new_bndrs
- = foldl2 unBindSubst subst old_bndrs new_bndrs
-
-
--------------------------------