[GHC] #11715: Constraint vs *
GHC
ghc-devs at haskell.org
Mon Mar 20 17:42:22 UTC 2017
#11715: Constraint vs *
-------------------------------------+-------------------------------------
Reporter: bgamari | Owner: goldfire
Type: bug | Status: new
Priority: highest | Milestone: 8.4.1
Component: Compiler (Type | Version: 8.0.1-rc1
checker) | Keywords: Typeable,
Resolution: | LevityPolymorphism, Roles
Operating System: Unknown/Multiple | Architecture:
| Unknown/Multiple
Type of failure: None/Unknown | Test Case:
Blocked By: | Blocking:
Related Tickets: | Differential Rev(s):
Wiki Page: |
-------------------------------------+-------------------------------------
Comment (by goldfire):
There is a counterargument to the need to find a ''sound'' solution.
Assume `type family F`. In GHC 8.0, you can say
{{{
type instance F Constraint = Int
type instance F Type = Bool
}}}
In GHC 8.4, you will also be able to say this, as `Constraint` will be
fully distinct from `Type`.
But comment:69 and comment:70 propose to disallow these instances in 8.2.
This is certainly quite strange from a user standpoint!
Instead, perhaps we live with the unsoundness, as long as the user can't
find out. My guess is that the user's only way of finding out is via
`Typeable`, which would need to reinforced against such attacks.
(Specifically, arrange to make sure that the rep for `Constraint` is
distinct from that for `Type`.) But I think we can do this.
I very much don't like the idea of unsoundness in Core, but it won't be
the only way to implement `unsafeCoerce`, and continuing to allow those
instances provides a smoother experience to the user.
Credit to @yav, who provoked me into actually suggesting to live with
unsoundness!
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/11715#comment:73>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list