[GHC] #15846: Re-examine mkResidualConstraints

GHC ghc-devs at haskell.org
Thu Nov 29 11:29:54 UTC 2018


#15846: Re-examine mkResidualConstraints
-------------------------------------+-------------------------------------
        Reporter:  goldfire          |                Owner:  (none)
            Type:  bug               |               Status:  new
        Priority:  normal            |            Milestone:
       Component:  Compiler          |              Version:  8.6.1
      Resolution:                    |             Keywords:
Operating System:  Unknown/Multiple  |         Architecture:
                                     |  Unknown/Multiple
 Type of failure:  None/Unknown      |            Test Case:
      Blocked By:                    |             Blocking:
 Related Tickets:                    |  Differential Rev(s):
       Wiki Page:                    |
-------------------------------------+-------------------------------------
Description changed by simonpj:

Old description:

> Simon and I spent some time debating `TcSimplify.mkResidualConstraints`.
> Here is what we learned:
>
> * The current code handles covars at the top level only. At one point, we
> were worried about covars in nested implications. But I conjecture this
> can't happen, because these would necessarily be instances of skolem-
> escape, prevented elsewhere. (Why skolem-escape? Because the covar would
> mention local skolems, and yet appears in the type of the variable(s)
> we're trying to infer.)
>
> * We think that any covars that come through `mkResidualConstraints` will
> ''never'' be solved. That's because there can't be given equality from an
> outer context -- if there were, we'd be in the "let should not be
> generalized" case and wouldn't be in `simplifyInfer`.
>
> *  The `promoteTyVarSet` call in `mkResidualConstraints` appears to be
> entirely redundant, because anything that gets caught there should also
> have been caught in `decideMonoTyVars`.
>
> * So the only time that we should do work in `mkResidualConstraints` is
> when we have deferred type errors. Perhaps with that insight, it can be
> simplified.
>
> This ticket is to track our understanding of this function, settle on a
> way to improve it, and then execute that change. At the minimum, we
> should figure out whether that `promoteTyVarSet` is necessary.

New description:

 Simon and I spent some time debating `TcSimplify.mkResidualConstraints`
 and the accompanying `Note [Emitting the residual implication in
 simplifyInfer]`.

 Here is what we learned:

 * The current code handles covars at the top level only. At one point, we
 were worried about covars in nested implications. But I conjecture this
 can't happen, because these would necessarily be instances of skolem-
 escape, prevented elsewhere. (Why skolem-escape? Because the covar would
 mention local skolems, and yet appears in the type of the variable(s)
 we're trying to infer.)

 * We think that any covars that come through `mkResidualConstraints` will
 ''never'' be solved. That's because there can't be given equality from an
 outer context -- if there were, we'd be in the "let should not be
 generalized" case and wouldn't be in `simplifyInfer`.

 *  The `promoteTyVarSet` call in `mkResidualConstraints` appears to be
 entirely redundant, because anything that gets caught there should also
 have been caught in `decideMonoTyVars`.

 * So the only time that we should do work in `mkResidualConstraints` is
 when we have deferred type errors. Perhaps with that insight, it can be
 simplified.

 This ticket is to track our understanding of this function, settle on a
 way to improve it, and then execute that change. At the minimum, we should
 figure out whether that `promoteTyVarSet` is necessary.

--

-- 
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/15846#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler


More information about the ghc-tickets mailing list