
On Tuesday, March 30, 2021 4:36 PM, Henning Thielemann
On Tue, 30 Mar 2021, Tom Smeding wrote:
Note that:
- In my actual use case, 'C' is of course not empty. - In my actual use case, my type class instances are in fact injective, even though I do enable FlexibleInstances to be able to write e.g. 'instance C (T a Int)'.
- Above, the dictionary for 'C (a, b)' includes a dictionary for 'C b', doesn't it? So if inference can resolve 'C b', then the compilation to Core can find the right dictionary, I think? (Not sure about this part.)
How shall GHC find the method implementations for 'b' if it only has the methods for '(a,b)'?
Because the instance for '(a,b)' includes a type class constraint for 'b', I expected that the relevant dictionary (which is surely needed for implementing the methods contained in the dictionary for '(a,b)') would be available. However, I understand from a sibling post that this dictionary for 'b' is only contained in the closures for the methods in the dictionary for '(a,b)', and GHC cannot easily access that. In any case, I have a workaround, as I posted in a reply to Kai's email. Nevertheless, thanks for the help! :) Cheers, Tom