[next fix for Igor2.RuleDevelopment.Matching.abduceIO
Helmut Grohne <grohne@cs.uni-bonn.de>**20150123160840
 Ignore-this: 567d85b19f5a537fd5ae1f20eb79f711
 
 So even after the previous fix, the irrefutable pattern match still can occur.
 When a from a target rhs is substituted to a term of a different type, the type
 of the variable in the resulting substitution is different from the variable in
 tgtvars and thus unaffectedvars can contain it causing a conflict during merge.
 
 The difference really must ignore types.
 
 put_last with background knowledge last triggers the bug.
] hunk ./src/Igor2/RuleDevelopment/Matching.hs 241
-                Just s   -> do let tgtvars = nub $ concatMap getVars (lhs (crul tgt))
+                Just s   -> do let sameVarName (TVarE i1 _) (TVarE i2 _) = i1 == i2
+                                   sameVarName _            _            = False
+                               let tgtvars = nub $ concatMap getVars (lhs (crul tgt))
hunk ./src/Igor2/RuleDevelopment/Matching.hs 245
-                               let unaffectedvars = (tgtvars \\ bthvars) \\ map (\(n,t) -> toVar t n) (assocs s)
+                               let unaffectedvars = deleteFirstsBy sameVarName (tgtvars \\ bthvars) $ map (\(n,t) -> toVar t n) (assocs s)