Skip to content
Snippets Groups Projects
Forked from Glasgow Haskell Compiler / GHC
5543 commits behind the upstream repository.
  • sheaf's avatar
    b74b6191
    matchLocalInst: do domination analysis · b74b6191
    sheaf authored and Marge Bot's avatar Marge Bot committed
    When multiple Given quantified constraints match a Wanted, and there is
    a quantified constraint that dominates all others, we now pick it
    to solve the Wanted.
    
    See Note [Use only the best matching quantified constraint].
    
    For example:
    
      [G] d1: forall a b. ( Eq a, Num b, C a b  ) => D a b
      [G] d2: forall a  .                C a Int  => D a Int
      [W] {w}: D a Int
    
    When solving the Wanted, we find that both Givens match, but we pick
    the second, because it has a weaker precondition, C a Int, compared
    to (Eq a, Num Int, C a Int). We thus say that d2 dominates d1;
    see Note [When does a quantified instance dominate another?].
    
    This domination test is done purely in terms of superclass expansion,
    in the function GHC.Tc.Solver.Interact.impliedBySCs. We don't attempt
    to do a full round of constraint solving; this simple check suffices
    for now.
    
    Fixes #22216 and #22223
    b74b6191
    History
    matchLocalInst: do domination analysis
    sheaf authored and Marge Bot's avatar Marge Bot committed
    When multiple Given quantified constraints match a Wanted, and there is
    a quantified constraint that dominates all others, we now pick it
    to solve the Wanted.
    
    See Note [Use only the best matching quantified constraint].
    
    For example:
    
      [G] d1: forall a b. ( Eq a, Num b, C a b  ) => D a b
      [G] d2: forall a  .                C a Int  => D a Int
      [W] {w}: D a Int
    
    When solving the Wanted, we find that both Givens match, but we pick
    the second, because it has a weaker precondition, C a Int, compared
    to (Eq a, Num Int, C a Int). We thus say that d2 dominates d1;
    see Note [When does a quantified instance dominate another?].
    
    This domination test is done purely in terms of superclass expansion,
    in the function GHC.Tc.Solver.Interact.impliedBySCs. We don't attempt
    to do a full round of constraint solving; this simple check suffices
    for now.
    
    Fixes #22216 and #22223
Code owners
Assign users and groups as approvers for specific file changes. Learn more.
T22223.hs 555 B