[GHC] #14539: untouchable type inside the constraints
GHC
ghc-devs at haskell.org
Thu Nov 30 23:33:43 UTC 2017
#14539: untouchable type inside the constraints
-------------------------------------+-------------------------------------
Reporter: Lemming | Owner: (none)
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler (Type | Version: 8.2.2
checker) |
Resolution: | Keywords:
Operating System: Unknown/Multiple | Architecture:
Type of failure: GHC rejects | Unknown/Multiple
valid program | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by goldfire):
This is correct behavior by GHC.
Untouchable variables are explained accessibly in the
[https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/jfp-
outsidein.pdf OutsideIn paper], sections 5.1 and 5.2. (I think you'll be
able to get most of the meaning without reading prior sections.)
Essentially, any type that GHC has to guess cannot be affected from code
where an equality assumption is in effect. Your `sign :: Sign Double`
happens in a context where the `FullShape sh ~ sh` equality can be
assumed. It cannot thus affect the type that GHC guesses for `sign`, which
is introduced outside the scope of that equality constraint.
The solution is simply to annotate the type of `sign` when it is
introduced: `... \(sign :: Sign Double) -> ...`, and you should be OK.
If you agree with this analysis, please close the ticket. Thanks!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/14539#comment:1>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list