Spot on Alexis.    Should not be hard to fix this.

 

I think the best thing would be in mkCallUDs

 

Make a ticket!  Happy to help if you or Sandy need anything from me.

 

Simon

 

 

From: ghc-devs <ghc-devs-bounces@haskell.org> On Behalf Of Alexis King
Sent: 15 March 2020 02:47
To: Sandy Maguire <sandy@sandymaguire.me>
Cc: ghc-devs <ghc-devs@haskell.org>
Subject: Re: Specializing functions with implicit parameters

 

On Mar 14, 2020, at 20:03, Sandy Maguire <sandy@sandymaguire.me> wrote:

 

What GHC are you testing against? I suspect https://gitlab.haskell.org/ghc/ghc/merge_requests/668 will fix this.

 

I’ve tested against HEAD. I think the change you link is helpful, but it doesn’t quite get there: the usage gets dumped before specHeader even gets a chance to look at the call. The relevant bit of code is here:

 

https://gitlab.haskell.org/ghc/ghc/blob/1de3ab4a147eeb0b34b24a3c0e91f174e6e5cb79/compiler/specialise/Specialise.hs#L2274-2302

 

Specifically, this line seals the deal:

 

    ClassPred cls _ -> not (isIPClass cls)  -- Superclasses can't be IPs

 

So maybe the right fix is just to change the role of type_determines_value so that it turns SpecDicts into UnspecArgs, and then with your change everything would just happily work out.