{-# LANGUAGE KindSignatures #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} class C1 (a :: Bool) where c :: proxy a -> Int class C2 (a :: [*]) data Baz = Baz data Foo = Foo class C3 (a :: [(Baz, Foo)]) class C4 (a :: (*)) class C5 (a :: App foo baz) class C6 (a :: (parens)) data X (a :: [*]) x1 = undefined :: X '[Int] x2 = undefined :: X '[Int, Double] data Y (a :: (*, Bool)) y1 = undefined :: Y '(Double, True) y2 = undefined :: Y '(Double, 'False) z1 = undefined :: X [a -> b, X '[]] z2 = undefined :: Y (a -> b, True)