[add freevar instances for (Var,Ty)
John Meacham <john@repetae.net>**20060815145031] hunk ./Grin/Grin.hs 612
+instance FreeVars Lam (Set.Set (Var,Ty)) where
+    freeVars (x :-> y) = freeVars y Set.\\ freeVars x
hunk ./Grin/Grin.hs 626
+instance FreeVars Val (Set.Set (Var,Ty)) where
+    freeVars (NodeC t xs) = freeVars xs
+    freeVars (NodeV v xs) = Set.insert (v,TyTag) $ freeVars xs
+    freeVars (Const v) = freeVars v
+    freeVars (Var v t) = Set.singleton (v,t)
+    freeVars (Tup vs) = freeVars vs
+    freeVars _ = Set.empty
+
hunk ./Grin/Grin.hs 655
+    freeVars Alloc { expValue = v, expCount = c, expRegion = r } = freeVars (v,c,r)
+    freeVars Call { expValue = v, expArgs = as } = freeVars (v:as)
+    freeVars MkClosure { expValue = v, expArgs = as, expRegion = r } = freeVars (v,as,r)
+    freeVars MkCont { expCont = v, expLam = as} = freeVars (v,as)
+
+instance FreeVars Exp (Set.Set (Var,Ty)) where
+    freeVars (a :>>= b) = freeVars (a,b)
+    freeVars (App a vs _) =  freeVars vs
+    freeVars (Case x xs) = freeVars (x,xs)
+    freeVars (Return v) = freeVars v
+    freeVars (Store v) = freeVars v
+    freeVars (Fetch v) = freeVars v
+    freeVars (Update x y) = freeVars (x,y)
+    freeVars (Prim _ x) = freeVars x
+    freeVars Error {} = Set.empty
+    freeVars Let { expDefs = fdefs, expBody = body } = mconcat (map (freeVars . funcDefBody) fdefs) `mappend` freeVars body
+    freeVars NewRegion { expLam = l } = freeVars l