@@ -154,7 +154,7 @@ solve maxUniverseLevel inpConstraints =
154154 : "Involved constraints: "
155155 : map (("\t"++) . show) (suspect : S.toList suspects)
156156 modify $ \ st -> st { domainStore = M.insert (Var var) (newDom, S.insert suspect suspects) doms }
157− addToQueueRHS (Var var)
157+ addToQueueRHS (fst suspect) (Var var)
158158 updateUpperBoundOf _ UVal{} _ = return ()
159159
160160 updateLowerBoundOf :: (UConstraint, FC) -> UExp -> Int -> StateT SolverState TC ()
@@ -170,30 +170,32 @@ solve maxUniverseLevel inpConstraints =
170170 : "Involved constraints: "
171171 : map (("\t"++) . show) (suspect : S.toList suspects)
172172 modify $ \ st -> st { domainStore = M.insert (Var var) (newDom, S.insert suspect suspects) doms }
173− addToQueueLHS (Var var)
173+ addToQueueLHS (fst suspect) (Var var)
174174 updateLowerBoundOf _ UVal{} _ = return ()
175175
176176 -- | add all constraints (with the given var on the lhs) to the queue
177− addToQueueLHS :: MonadState SolverState m => Var -> m ()
178− addToQueueLHS var =
177+ addToQueueLHS :: MonadState SolverState m => UConstraint -> Var -> m ()
178+ addToQueueLHS thisCons var =
179179 case M.lookup var constraintsLHS of
180180 Nothing -> return ()
181181 Just cs -> do
182182 Queue list set <- gets queue
183− let newCons = [ c | c <- S.toList cs, fst c `S.notMember` set ]
183+ let set' = S.insert thisCons set
184+ let newCons = [ c | c <- S.toList cs, fst c `S.notMember` set' ]
184185 if null newCons
185186 then return ()
186187 else modify $ \ st -> st { queue = Queue (list ++ newCons)
187188 (S.union set (S.fromList (map fst newCons))) }
188189
189190 -- | add all constraints (with the given var on the rhs) to the queue
190− addToQueueRHS :: MonadState SolverState m => Var -> m ()
191− addToQueueRHS var =
191+ addToQueueRHS :: MonadState SolverState m => UConstraint -> Var -> m ()
192+ addToQueueRHS thisCons var =
192193 case M.lookup var constraintsRHS of
193194 Nothing -> return ()
194195 Just cs -> do
195196 Queue list set <- gets queue
196− let newCons = [ c | c <- S.toList cs, fst c `S.notMember` set ]
197+ let set' = S.insert thisCons set
198+ let newCons = [ c | c <- S.toList cs, fst c `S.notMember` set' ]
197199 if null newCons
198200 then return ()
199201 else modify $ \ st -> st { queue = Queue (list ++ newCons)