{-# LANGUAGE DataKinds #-} {-# LANGUAGE MultiParamTypeClasses #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE TypeOperators #-} module Types where class Class1 type Syn1 = 1337 type Syn2 = "Hello" type Syn3 = Char type Syn4 = 'Nothing type Syn5 = Syn2 type Syn6 = String type Syn7 = (Syn6, Syn3) type Syn8 a = a type Syn9 a = Syn7 type Syn10 a = Maybe a type Syn11 a = Either a a type Syn12 = Fam4 Syn7 Syn6 type Syn13 = Fam6 type Syn14 = Fam4 Int Word type Syn15 = Fam7 "World" 42 type Syn16 a = Fam4 a (Fam4 Syn3 Syn7) type Syn17 a = Fam7 Syn2 a type family Fam1 type family Fam2 type instance Fam2 = Syn7 type family Fam3 a type family Fam4 a b type instance Fam4 Syn3 Syn7 = Syn6 type instance Fam4 Syn7 Syn6 = Syn3 type family Fam5 where type family Fam6 where Fam6 = Syn2 type family Fam7 a b where Fam7 Syn2 Syn1 = Syn4 type family Fam8 f where Fam8 (a -> b) = a ': Fam8 b Fam8 _ = '[]