{-# Language DataKinds, TypeInType, KindSignatures #-}

import Data.HeterogeneousListLiterals
import GHC.TypeLits
import Data.Kind
import Data.Dynamic

newtype HList (a :: [Type]) = HList [Dynamic]

hList :: HLL input output => input -> HList output
hList = HList . toDynamicList

a :: HList '[]
a = hList ()

b :: HList '[Bool]
b = hList (Only True)

c :: HList '[Bool, Int, Double, String]
c = hList (True, 24, 10.5, "Fire")

-- | just making sure the docs type check
main :: IO ()
main = do
  _ <- return (a,b,c)
  return ()