@@ -133,25 +133,26 @@ union p1 p2 newDesc =
133 do point1@(Pt ref1) <- repr p1
133 do point1@(Pt ref1) <- repr p1
134 point2@(Pt ref2) <- repr p2
134 point2@(Pt ref2) <- repr p2
136− -- assert (point1 /= point2)
138 Info w1 d1 <- readIORef ref1
136 Info w1 d1 <- readIORef ref1
139 Info w2 d2 <- readIORef ref2
137 Info w2 d2 <- readIORef ref2
140+ then writeIORef d1 newDesc
141− weight1 <- readIORef w1
142+ weight1 <- readIORef w1
142− weight2 <- readIORef w2
143+ weight2 <- readIORef w2
144− let !newWeight = weight1 + weight2
145+ let !newWeight = weight1 + weight2
146− if weight1 >= weight2
147+ if weight1 >= weight2
148− do writeIORef ref2 (Link point1)
149+ do writeIORef ref2 (Link point1)
149− writeIORef w1 newWeight
150+ writeIORef w1 newWeight
150− writeIORef d1 newDesc
151+ writeIORef d1 newDesc
152− do writeIORef ref1 (Link point2)
153+ do writeIORef ref1 (Link point2)
153− writeIORef w2 newWeight
154+ writeIORef w2 newWeight
154− writeIORef d2 newDesc
155+ writeIORef d2 newDesc
157equivalent :: Point a -> Point a -> IO Bool
158equivalent :: Point a -> Point a -> IO Bool