{-# LANGUAGE TemplateHaskell, GADTs #-} module T4188 where import Language.Haskell.TH import System.IO class C a where {} data T1 a where MkT1 :: a -> b -> T1 a data T2 a where MkT2 :: (C a, C b) => a -> b -> T2 a data T3 x where MkT3 :: (C x, C y) => x -> y -> T3 (x,y) $(do { dec1 <- reify ''T1 ; runIO (putStrLn (pprint dec1)) ; dec2 <- reify ''T2 ; runIO (putStrLn (pprint dec2)) ; dec3 <- reify ''T3 ; runIO (putStrLn (pprint dec3)) ; runIO (hFlush stdout) ; return [] })