on master help sign in
Do a bit less work in adjustRankHelp
ae0c7e2Evan Czaplicki
src/Type/Solve.hs+6−6
@@ -89,30 +89,30 @@ adjustRank youngMark visitedMark groupRank var =
89
89
90
90
91adjustRankHelp :: Int -> Int -> Int -> Variable -> Descriptor -> TS.Solver Int
91adjustRankHelp :: Int -> Int -> Int -> Variable -> Descriptor -> TS.Solver Int
92−adjustRankHelp youngMark visitedMark groupRank var descriptor =
92+adjustRankHelp youngMark visitedMark groupRank var descriptor@(Descriptor content rank mark _) =
93− if _mark descriptor == youngMark then
93+ if mark == youngMark then
94
94
95 do -- Set the variable as marked first because it may be cyclic.
95 do -- Set the variable as marked first because it may be cyclic.
96 liftIO $ UF.modifyDescriptor var $ \desc ->
96 liftIO $ UF.modifyDescriptor var $ \desc ->
97 desc { _mark = visitedMark }
97 desc { _mark = visitedMark }
98
98
99 maxRank <-
99 maxRank <-
100− adjustRankContent youngMark visitedMark groupRank (_content descriptor)
100+ adjustRankContent youngMark visitedMark groupRank content
101
101
102 liftIO $ UF.modifyDescriptor var $ \desc ->
102 liftIO $ UF.modifyDescriptor var $ \desc ->
103 desc { _rank = maxRank }
103 desc { _rank = maxRank }
104
104
105 return maxRank
105 return maxRank
106
106
107− else if _mark descriptor /= visitedMark then
107+ else if mark /= visitedMark then
108
108
109− do let minRank = min groupRank (_rank descriptor)
109+ do let minRank = min groupRank rank
110 liftIO $ UF.setDescriptor var (descriptor { _mark = visitedMark, _rank = minRank })
110 liftIO $ UF.setDescriptor var (descriptor { _mark = visitedMark, _rank = minRank })
111 return minRank
111 return minRank
112
112
113 else
113 else
114
114
115− return (_rank descriptor)
115+ return rank
116
116
117
117
118adjustRankContent :: Int -> Int -> Int -> Content -> TS.Solver Int
118adjustRankContent :: Int -> Int -> Int -> Content -> TS.Solver Int