Circular functional dependencies cause loop in typechecker
In the attached file, a dictionary (Id A B) is rewritten with two functional dependencies (A -> B, B -> A) and two errors are added in our constraint bag (rightfully so), but the new workitem is symmetric (Id B A), goes back in the worklist and in the new iteration of the solver we have exactly the same process repeated.
This is a solveInteractWithDepth loop, not a solve_wanteds loop. I think the right thing to do is in doTopReact: (1) first try to apply functional dependencies, (2) then check if an instance matches, and (3) do a ContinueWith or a Stop but never throw the workitem back in the worklist as happens now. I have to discuss this with Simon.