GADTs don't seem to unpack properly
Consider this simple code:
type family Foo a b data Goof a b where Goof :: !(Foo a b :~: Int) -> Goof a b
(:~:) has just one constructor (
Refl) with no arguments, so I'd expect it to unpack to a void representation:
GoofConstr :: Foo a b ~N# Int => Goof a b WGoof :: Foo a b :~: Int -> Goof a b WGoof eq = case eq of Refl -> GoofConstr
But it doesn't seem to unpack at all.