id	summary	reporter	owner	description	type	status	priority	milestone	component	version	resolution	keywords	cc	os	architecture	failure	difficulty	testcase	blockedby	blocking	related
5015	Can't unsafeCoerce a GADT with a coercion	TristanAllwood		"{{{
type family Blah a 
type instance Blah Int = Int
data E where
  E :: (Blah a ~ Int) => a -> E
}}}

{{{
*Example Unsafe.Coerce GHC.Prim> (unsafeCoerce E) :: Any

<interactive>:1:15:
    Couldn't match type `Blah a0' with `Int'
    In the first argument of `unsafeCoerce', namely `E'
    In the expression: (unsafeCoerce E) :: Any
    In an equation for `it': it = (unsafeCoerce E) :: Any
}}}

This also doesn't work with less dangerous operators, like seq:

{{{
*Example Unsafe.Coerce GHC.Prim> (id E) `seq` ()

<interactive>:1:5:
    Couldn't match type `Blah a0' with `Int'
    In the first argument of `id', namely `E'
    In the first argument of `seq', namely `(id E)'
    In the expression: (id E) `seq` ()
}}}"	bug	closed	normal		Compiler (Type checker)	7.0.2	invalid			Unknown/Multiple	Unknown/Multiple	None/Unknown					
