{-# LANGUAGE TemplateHaskell, RankNTypes, LambdaCase #-}

module Data.HList.TH where

import Data.HList

import Language.Haskell.TH
import Language.Haskell.TH.Syntax

import Control.Applicative

hlist :: ExpQ -> ExpQ
hlist t = t >>= \case
  (ListE xs) -> foldr (\a b -> appE (appE (conE 'HCons) a) b) (conE 'HNil) (pure <$> xs)
  _          -> fail "hlist excepts a list"