[openPositions, freeVars, hasFreevars added
martin.hofmann@uni-bamberg.de**20081126154801] hunk ./src/Data/Fragments.hs 9
-    RuleFrags, insert, delete, replace,
-    fold, map, empty, null
+    RuleFrags, ruleFrags, insert, delete, replace,
+    fold, map, empty, null,
+    
+    openPositions, freeVars, hasFreeVars
hunk ./src/Data/Fragments.hs 16
-import Data.Rules (Rule, Rateable(..))
+import Data.Rules (Rule, Rateable(..), rhs, lhs)
hunk ./src/Data/Fragments.hs 18
-import qualified Prelude as P (null)
+import qualified Prelude as P (null,map)
hunk ./src/Data/Fragments.hs 20
+import Data.List ( (\\) )
hunk ./src/Data/Fragments.hs 23
-import Terms (Exp, Pat, size, Size, Position, Name)
+import Terms
hunk ./src/Data/Fragments.hs 30
+type OpenPos = (Exp,[Position])
hunk ./src/Data/Fragments.hs 37
-    , opos  :: [Position]     
+    , opos  :: [OpenPos]     
hunk ./src/Data/Fragments.hs 47
-ruleFrag :: Name -> Rule -> [Int] -> [Position] -> RuleFrag
+ruleFrag :: Name -> Rule -> [Int] -> [OpenPos] -> RuleFrag
hunk ./src/Data/Fragments.hs 53
+
+
+freeVars  :: Rule -> [Exp]
+freeVars  r = 
+    let lhsvars = concatMap getVarNames $ lhs r
+        rhsvars = getVarNames.rhs $ r
+        diff    = (\\) rhsvars lhsvars
+    in P.map VarE diff
+
+hasFreeVars :: Rule -> Bool
+hasFreeVars = not.P.null.freeVars
+
+openPositions :: Rule -> [OpenPos]
+openPositions r = P.map (openPos r) (freeVars r)
+    where
+    openPos r e = (e, getPos (rhs r) e) 
+
hunk ./src/Data/Fragments.hs 81
-rulefrags = fromList
+ruleFrags = fromList