[fix wrong hypotheses generated from direct call
Helmut Grohne <grohne@cs.uni-bonn.de>**20150522115033
 Ignore-this: b902aa608385e9cd9d7b11ba35de6010
 
 In the direct call a small example for the caller is selected. If that example
 happens to have a wildcard on its rhs, the compatibility check always succeeds
 due to the implementation of (==) using equal for TExp. We are assuming
 transitivity here, but (==) isn't transitive. Thus add an extra check that
] 
<
[Allow the usage of "undefined" in I/O examples as a wildcard
tobias@goedderz.info**20150213102412
 Ignore-this: 5c8e31939f80e395830beb342306ca8d
] 
[Introduced monadic mapping functions for terms and rules
tobias@goedderz.info**20150213164658
 Ignore-this: 4bc67a627cf248cd9de12fd73d374aa7
] 
[Removed the code that renamed wildcards uniquely
tobias@goedderz.info**20150311111250
 Ignore-this: 840026c5697c0d6ca621e382953ca285
 
 As it's not possible to avoid duplicate names during unification completely,
 it's pointless to make some variables unique. This greatly simplifies and speeds
 up the introduction of wildcards.
] 
[remove fromVar from class Term
Helmut Grohne <grohne@cs.uni-bonn.de>**20150330143850
 Ignore-this: bfc7bfad917288de9d737111fb84d047
 
 fromVar is prone to error, so replace it with a new method getVar yielding a
 Maybe. Then isVar gains a default implementation. All users of fromVar are
 switched to getVar using a new helper foldTerm.
 
 Note that getVarNames now really returns a unique list unlike the original
 implementation which could collect variables with equal names and different
 types multiple times, but all callers do expect a unique list.
] 
[add predicate anySubterm
Helmut Grohne <grohne@cs.uni-bonn.de>**20150522114730
 Ignore-this: 18fec7b18695ead84368b07b0b760e74
] 
> hunk ./src/Igor2/RuleDevelopment/Matching.hs 282
-        rside <- (applyC $ mapM (matchEval.lhs $ cr) rs) :: (IM (Either String [TExp]))
-        rside' <- either (return  . (const Nothing)) (evalIO n) rside
-        return $ maybe False ( == (rhs cr)) rside'
-
+        rside <- applyC $ mapM (matchEval . lhs $ cr) rs :: IM (Either String [TExp])
+        rside' <- either (return . const Nothing) (evalIO n) rside
+        return $ maybe False (\r -> not (anySubterm isWild r) && (r == rhs cr)) rside'
+{- In principle, the condition should be just r == rhs cr, but (==) is not
+ - transitive, because for TExp it becomes equal. Since we need transitivity
+ - here, we make it transitive by additionally requiring the absense for
+ - wildcards in r. -}