module T371 where import Data.Kind import Data.Singletons.TH $(singletons [d| data X (a :: Type) = X1 | X2 (Y a) deriving Show data Y (a :: Type) = Y1 | Y2 (X a) deriving Show |]) main :: IO () main = do print (sing :: Sing ('[] :: [Bool])) print (sing :: Sing '[True]) print (sing :: Sing (X1 :: X Bool)) print (sing :: Sing (Y2 X1 :: Y Bool))