packages feed

type-of-html-1.6.0.0: test/Type.hs

{-# 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 '["<a>"] "</a>"
  , ToList (Demote 'A :> Char # Demote 'Div :> Int)
    == 'List '["<a>", "</a><div>"] "</div>"
  , ToList ((Demote 'Div :@ (Demote 'ClassA := Int)) :> Int)
    == 'List '["<div class=\"","\">"] "</div>"
  , ToList ((Demote 'Div :@ (Demote 'ClassA := ())) :> Int)
    == 'List '["<div class>"] "</div>"
  , ToList ((Demote 'Div :@ (Demote 'ClassA := ())) :> ())
    == 'List '[] "<div class></div>"
  , ToList ((Demote 'Div :@ (Demote 'ClassA := () # Demote 'IdA := ())) :> ())
    == 'List '[] "<div class id></div>"
  , ToList ((Demote 'Div :@ (Demote 'ClassA := () # Demote 'IdA := Proxy "ab")) :> ())
    == 'List '[] "<div class id=\"ab\"></div>"
  )

type family a == b where
  a == a = ()
  a == b = TypeError ('Text "Unequal types:" ':$$: 'ShowType a ':$$: 'ShowType b)