{-# LANGUAGE DataKinds #-} {-# LANGUAGE TypeFamilies #-} module M where import GHC.TypeLits data A = A1 | A2 data B = B1 | B2 type family K (n :: Nat) where K 0 = A K 1 = A K 2 = B K 3 = B type F :: forall (n :: Nat) -> K n type family F n where F 0 = 'A1 F 1 = 'A2 F 2 = 'B1 F 3 = 'B2