[GHC] #8565: New GeneralisedNewtypeDeriving needs help with higher rank types
GHC
ghc-devs at haskell.org
Tue Nov 26 22:42:44 UTC 2013
#8565: New GeneralisedNewtypeDeriving needs help with higher rank types
-------------------------------------------------+-------------------------
Reporter: simonpj | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.6.3
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: None/Unknown | Unknown/Multiple
Test Case: | Difficulty:
typecheck/should_compile/T8565 | Unknown
Blocking: | Blocked By:
| Related Tickets:
-------------------------------------------------+-------------------------
Comment (by simonpj):
It should be fine. Solving `Coercible s t` constraints is very very like
solving `s ~ t` constraints. Just as we have a rule for `[s] ~ [t]` (by
solving the constraint `s~t`), so we have a rule for `Coercible [s] [t]`.
Now, we do have a rule for `(forall a. s) ~ (forall a. t)`, but it's a bit
tricky because of the scoping of `a`. We have to solve the implication
constraint `forall a. s~t`. To see how we do this for equality
constraint, look on line 745 of `TcCanonical`, and the key support
function `TcSMonad.deferTcSForAllEq`. The latter is the whole reason for
`TcLetCo`, which was a significant innovation at the time. (Previously we
could not decompose `forall/forall` equalities.) But now it's there, you
should be able to use the exact same strategy for `Coercible`. (Provided
you complete the `EvCoercible` refactoring you started.)
Simon
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8565#comment:9>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list