data A a where A1 :: forall a. Show a => a -> A a A2 :: forall a. (forall. Show a => a) -> A a deriving instance Show a => Show (A a) a1 :: Show a => a -> A a a1 = A1 a2 :: Show a => a -> A a -- a2 :: (Show a => a) -> A a a2 = A2 main :: IO () main = do print $ a1 42 print $ a2 69