Panic from rewritableTyVarsOfType

Ben Gamari ben at smart-cactus.org
Fri Feb 3 15:23:57 UTC 2017


Simon Peyton Jones <simonpj at microsoft.com> writes:

> Ben, Richard
>
> rewritableTyVarsOfType is used when deciding whether to split a [WD]
> constraint into [W] and [D]. For example, if we are adding
>    [WD] C a
> and there is an inert
>    [WD] a ~ Int
> then we want to split the [WD] into
>    [W] C a
>    [D] C a
> so that the [D] one can be rewritten and perhaps yield improvement etc.
>
> There is no point in rewriting coercions or cases in t, because they
> won't help (C t) to reduce. That's why rewriteableTyVarsOfType differs
> from tyVarsOfType. And indeed the arg of a class C should be a
> monotype.
>
Ahh, I see.

> So rewriteableTyVarsOfType doesn't expect foralls, hence the panic.
> But it's seeing a forall in an /equality/ constraint.
>
> FIRST ISSUE: I'm a bit surprised about that (smacks of impredicative
> polymorphism) so the first thing to check is that this is really
> supposed to happen in this program. Richard should be able to help.
>
Indeed this test is meant to fail, just not with a panic. I suspect this
means that my solver logic isn't catching requests for polytypes as
early as it needs to.

> SECOND ISSUE: But regardless, I now realise that shouldSplitWD only
> needs to split a [WD] equality if the LHS matches. If we have
>    [WD] a ~ ty   -- work item
>    [D] a ~ ty2   -- inert
> then we want to split the [WD] so we can get [D] ty ~ ty2. But
> otherwise there is no point.
>
> Richard do you agree?
>
> I'll try that out.
>
> Meanwhile to get you rolling, you can replace rewritableTyVars with
> tyCoVarsOfType and it'll all work, just a bit less efficiently.
>
Thanks Simon! Indeed that allows things to proceed and in the process,
confirms that there is a bug in my solver logic.

Cheers,

- Ben

-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 487 bytes
Desc: not available
URL: <http://mail.haskell.org/pipermail/ghc-devs/attachments/20170203/b2bb58bc/attachment.sig>


More information about the ghc-devs mailing list