[GHC] #8745: GeneralizedNewtypeDeriving is still not Safe
GHC
ghc-devs at haskell.org
Tue Feb 11 22:39:04 UTC 2014
#8745: GeneralizedNewtypeDeriving is still not Safe
-------------------------------------+------------------------------------
Reporter: goldfire | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: Compiler | Version: 7.8.1-rc1
Resolution: | Keywords: Safe
Operating System: Unknown/Multiple | Architecture: Unknown/Multiple
Type of failure: None/Unknown | Difficulty: Unknown
Test Case: | Blocked By:
Blocking: | Related Tickets:
-------------------------------------+------------------------------------
Comment (by nomeata):
We have some special handling in Safe mode in place where we do the
Coerible thing, but it is neither well tested nor well discussed.
(`getCoercibleInst` in `TcInteract`)
Currently, in Safe Mode, the following additional restrictions exist when
checking whether something is `Coercible`:
> To coerce under a type constructor, ''all'' data constructors of ''all''
type constructors involved in the definition of that type constructors
need to be in scope.
No additional constraint is put on unfolding a newtype, but there we
already require the constructor to be in scope.
I believe that this condition is sufficient for “the use can implement
coerce himself (ignoring the run-time cost)”. If anything, it might turn
out too strong.
If that works as intended, `Coercible` and GND should be safe. There might
possibly be ways to break it, maybe with different modules, some safe and
some not... but that would simply be bugs then, and I’m not claiming bug
freeness.
A trustworthy `GHC.Coerce` might be nice. Or maybe even `Data.Coerce`?
After all the interface could be provided by other compilers as well...
Not only for Safe, but to avoid people having to import the mingle-mangle
of `GHC.Exts`.
--
Ticket URL: <http://ghc.haskell.org/trac/ghc/ticket/8745#comment:3>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list