{-# LANGUAGE PolyKinds, MultiParamTypeClasses, FlexibleContexts, DataKinds, TypeFamilies #-} module T9200 where import Data.Proxy ------ -- test CUSK on classes class C (f :: k) (a :: k2) where c_meth :: D a => Proxy f -> Proxy a -> () class C () a => D a --------- --- test CUSK on type synonyms data T1 a b c = MkT1 (S True b c) data T2 p q r = MkT2 (S p 5 r) data T3 x y q = MkT3 (S x y '()) type S (f :: k1) (g :: k2) (h :: k3) = ((T1 f g h, T2 f g h, T3 f g h) :: *) ---------- -- test CUSK on closed type families type family F (a :: k) :: k where F True = False F False = True F x = x