{-# LANGUAGE GADTs, ExistentialQuantification #-}
-- Trac #289
module ShouldCompile where
class Foo a where
foo :: a -> Int
data T = forall a. T (G a)
data G a where
A :: G a
B :: Foo a => a -> G a
doFoo :: T -> Int
doFoo (T A) = 2
doFoo (T (B x)) = foo x