@@ -21,16 +21,15 @@ import Type.Unify
21This sorts variables into the young and old pools accordingly.
21This sorts variables into the young and old pools accordingly.
23generalize :: TS.Pool -> TS.Solver ()
23generalize :: TS.Pool -> TS.Solver ()
24−generalize youngPool =
24+generalize (TS.Pool youngRank youngInhabitants) =
25 do youngMark <- TS.uniqueMark
25 do youngMark <- TS.uniqueMark
26− let youngRank = TS._maxRank youngPool
27 let insert dict var =
26 let insert dict var =
28− do descriptor <- liftIO $ UF.descriptor var
27+ do descriptor <- UF.descriptor var
29− liftIO $ UF.modifyDescriptor var (\desc -> desc { _mark = youngMark })
28+ UF.modifyDescriptor var (\desc -> desc { _mark = youngMark })
30 return $ Map.insertWith (++) (_rank descriptor) [var] dict
29 return $ Map.insertWith (++) (_rank descriptor) [var] dict
32 -- Sort the youngPool variables by rank.
31 -- Sort the youngPool variables by rank.
33− rankDict <- foldM insert Map.empty (TS._inhabitants youngPool)
32+ rankDict <- liftIO $ foldM insert Map.empty youngInhabitants
35 -- get the ranks right for each entry.
34 -- get the ranks right for each entry.
36 -- start at low ranks so that we only have to pass
35 -- start at low ranks so that we only have to pass