Note [unifyFunDeps]
The Bool returned by `unifyFunDeps` is True if we have unified a variable that occurs in the constraint we are trying to solve; it is not in the inert set so `wrapUnifierTcS` won't kick it out. Instead we want to send it back to the start of the pipeline. Hence the Bool. It's vital that we don't return (not (null unified)) because the fundeps may create fresh variables; unifying them (alone) should not make us send the constraint back to the start, or we'll get an infinite loop. See Note [Fundeps with instances, and equality orientation] in GHC.Tc.Solver.Dict and Note [Improvement orientation] in GHC.Tc.Solver.Equality.
References 2
- Fundeps with instances, and equality orientation GHC.Tc.Solver.Dict
- Improvement orientation GHC.Tc.Solver.Equality
Referenced by 1
- GHC.Tc.Solver.Monad call site