Deal correctly with infix type constructors in GADT decls
[ghc-hetmet.git] / compiler / coreSyn / CoreFVs.lhs
index fb6017e..2fae6ac 100644 (file)
@@ -5,8 +5,9 @@ Taken quite directly from the Peyton Jones/Lester paper.
 
 \begin{code}
 module CoreFVs (
-       exprFreeVars,   -- CoreExpr -> VarSet   -- Find all locally-defined free Ids or tyvars
+       exprFreeVars,   -- CoreExpr   -> VarSet -- Find all locally-defined free Ids or tyvars
        exprsFreeVars,  -- [CoreExpr] -> VarSet
+       bindFreeVars,   -- CoreBind   -> VarSet
 
        exprSomeFreeVars, exprsSomeFreeVars,
        exprFreeNames, exprsFreeNames,
@@ -59,6 +60,12 @@ exprFreeVars = exprSomeFreeVars isLocalVar
 exprsFreeVars :: [CoreExpr] -> VarSet
 exprsFreeVars = foldr (unionVarSet . exprFreeVars) emptyVarSet
 
+bindFreeVars :: CoreBind -> VarSet
+bindFreeVars (NonRec b r) = exprFreeVars r
+bindFreeVars (Rec prs)    = addBndrs (map fst prs) 
+                                    (foldr (union . rhs_fvs) noVars prs)
+                                    isLocalVar emptyVarSet
+
 exprSomeFreeVars :: InterestingVarFun  -- Says which Vars are interesting
                 -> CoreExpr
                 -> VarSet