newVals = filter legalInterval [Iv (max xl (rh + 1)) (max xh rh)] -- input above rule
newRules = filter legalRule [Rule (Iv (max (xh + 1) rl) (max xh rh)) d] -- rule above input
-
useRules :: [Rule] -> [Interval] -> [Interval]
useRules [] vals = vals
useRules _ [] = []
| otherwise = newResults ++ (useRules (newRules ++ rs) (newVals ++ vs))
where (newResults, newVals, newRules) = useRule r v
-
legalInterval :: Interval -> Bool
legalInterval (Iv l h) = l <= h