• simonpj@microsoft.com's avatar
    Use "on the spot" solving for fundeps · 50d02935
    simonpj@microsoft.com authored
    When we spot an equality arising from a functional dependency,
    we now use that equality (a "wanted") to rewrite the work-item
    constraint right away.  This avoids two dangers
     Danger 1: If we send the original constraint on down the pipeline
               it may react with an instance declaration, and in delicate
    	   situations (when a Given overlaps with an instance) that
    	   may produce new insoluble goals: see Trac #4952
     Danger 2: If we don't rewrite the constraint, it may re-react
               with the same thing later, and produce the same equality
               again --> termination worries.
    To achieve this required some refactoring of FunDeps.lhs (nicer
    This patch also contains a couple of unrelated improvements
    * A bad bug in TcSMonad.nestImplicTcS whereby the Tcs tyvars
      of an outer implication were not untouchable inside
    * Improved logging machinery for the type constraint solver;
      use -ddump-cs-trace (probably with a wider default line width
      -dppr-cols=200 or something)