[remove names in the head of rules from the free variables in their body. the rule will never fire if the head names are not in scope.
John Meacham <john@repetae.net>**20061128042900] hunk ./E/FreeVars.hs 125
+-- | we delete the free variables of the heads of a rule from the rule's free
+-- variables. the reason for doing this is that the rule cannot fire if all its
+-- heads are in scope, and if it were not done then many functions seem
+-- recursive when they arn't actually.
+
hunk ./E/FreeVars.hs 131
-    freeVars rule = freeVars (ruleBody rule) S.\\ fromList (map tvrIdent $ ruleBinds rule)
-instance FreeVars Rule (IdMap TVr) where
-    freeVars rule = freeVars (ruleBody rule) S.\\ fromList [ (tvrIdent t,t) | t <- ruleBinds rule]
+    freeVars rule = freeVars (ruleBody rule) S.\\ (fromList (map tvrIdent $ ruleBinds rule) `mappend` ruleHeadFV rule)
+--instance FreeVars Rule (IdMap TVr) where
+--    freeVars rule = freeVars (ruleBody rule) S.\\ fromList [ (tvrIdent t,t) | t <- ruleBinds rule]
+
+
+ruleHeadFV r = (S.insert (tvrIdent $ ruleHead r) $ freeVars (ruleArgs r)) S.\\ fromList (map tvrIdent $ ruleBinds r)