[GHC] #7354: Panic with recursion-schemes package and unit
GHC
cvs-ghc at haskell.org
Mon Jan 28 04:53:31 CET 2013
#7354: Panic with recursion-schemes package and unit
-------------------------------+--------------------------------------------
Reporter: amplitwist | Owner:
Type: bug | Status: new
Priority: normal | Milestone:
Component: GHCi | Version: 7.6.1
Keywords: | Os: Linux
Architecture: x86_64 (amd64) | Failure: GHCi crash
Difficulty: Unknown | Testcase: indexed_types/T7354a, T7354b
Blockedby: | Blocking:
Related: |
-------------------------------+--------------------------------------------
Comment(by shachaf):
For what it's worth, elliott in #haskell came across this bug in a
different context. Here are two simpler cases (7.6.1):
* Panics:
{{{
type family T :: * -> *
x :: ()
x = undefined :: T a
}}}
* Doesn't panic, but type-checks when it shouldn't:
{{{
type family T :: * -> *
x :: ()
x = undefined :: (b ~ T a) => b
}}}
Note that if you make an instance of T (e.g. `newtype Id a = Id a; type
instance T = Id`), then even uses of Id unrelated to `x` cause a panic, as
long as `x` exists.
`-dcore-lint` catches the first case before it gets to a "real" panic.
None of this is problematic in HEAD.
Note: I haven't managed to get `unsafeCoerce` out of this, but that
doesn't mean it's impossible. It's important to keep in mind that in the
presence of SafeHaskell, type checker bugs can have security implications.
Maybe `-XSafe` should imply/suggest `-dcore-lint`, or something along
those lines? That's come up in a few other places, like #7453. Using
SafeHaskell safely should be as easy as possible, not rely on obscure
folklore and "compiler debugging options".
--
Ticket URL: <http://hackage.haskell.org/trac/ghc/ticket/7354#comment:7>
GHC <http://www.haskell.org/ghc/>
The Glasgow Haskell Compiler
More information about the ghc-tickets
mailing list