{-# LANGUAGE UndecidableInstances #-} {-# LANGUAGE FlexibleInstances #-} {-# LANGUAGE TypeOperators #-} {-# LANGUAGE TypeFamilies #-} {-# LANGUAGE TypeInType #-} {-# LANGUAGE DataKinds #-} {-# LANGUAGE PolyKinds #-} module Main where import GHC.TypeLits import Html.Type.Internal import Data.Proxy main :: IO () main = pure () where _x_ = undefined :: Test type Demote (t :: k) = k type Test = ( ToList () == 'List '[] "" , ToList Int == 'List '[""] "" , ToList (Proxy "a") == 'List '[] "a" , ToList (Demote 'A :> Char) == 'List '[""] "" , ToList (Demote 'A :> Char # Demote 'Div :> Int) == 'List '["", "
"] "
" , ToList ((Demote 'Div :@ (Demote 'ClassA := Int)) :> Int) == 'List '["
"] "
" , ToList ((Demote 'Div :@ (Demote 'ClassA := ())) :> Int) == 'List '["
"] "
" , ToList ((Demote 'Div :@ (Demote 'ClassA := ())) :> ()) == 'List '[] "
" , ToList ((Demote 'Div :@ (Demote 'ClassA := () # Demote 'IdA := ())) :> ()) == 'List '[] "
" , ToList ((Demote 'Div :@ (Demote 'ClassA := () # Demote 'IdA := Proxy "ab")) :> ()) == 'List '[] "
" ) type family a == b where a == a = () a == b = TypeError ('Text "Unequal types:" ':$$: 'ShowType a ':$$: 'ShowType b)