{-# LANGUAGE DataKinds             #-}
{-# LANGUAGE MultiParamTypeClasses #-}
{-# LANGUAGE TypeFamilies          #-}
{-# LANGUAGE UndecidableInstances  #-}

module Types where

import GHC.TypeLits

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