{-# 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 ()