Note [unifyFunDeps]

GHC/Tc/Solver/Monad.hs:2246 compiler

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

Referenced by 1