@@ -49,16 +49,17 @@ generalize youngPool = do
4949 -- otherwise generalize
5050 let registerIfLowerRank var = do
5151 isRedundant <- liftIO $ UF.redundant var
52− if isRedundant then return () else do
52+ case isRedundant of
53+ True -> return ()
54+ False -> do
5355 desc <- liftIO $ UF.descriptor var
54− if rank desc < youngRank
55− then TS.register var >> return ()
56− else let flex' = if flex desc == Flexible then Rigid else flex desc
57− in liftIO $ UF.setDescriptor var (desc { rank = noRank, flex = flex' })
58−
59− mapM registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)
60−
61− return ()
56+ case rank desc < youngRank of
57+ True -> TS.register var >> return ()
58+ False -> do
59+ let flex' = case flex desc of { Flexible -> Rigid ; other -> other }
60+ liftIO $ UF.setDescriptor var (desc { rank = noRank, flex = flex' })
61+
62+ mapM_ registerIfLowerRank (Map.findWithDefault [] youngRank rankDict)
6263
6364
6465-- adjust the ranks of variables such that ranks never increase as you