{-# LANGUAGE TemplateHaskell #-} module THBug1 where import Language.Haskell.TH import Language.Haskell.TH.Syntax data HCons a b = HCons a b data HNil = HNil mhlt :: [Q Type] -> Q Type mhlt xss = [t| $(foldThing xss)|] where foldThing (x:xs) = [t| HCons $x $(foldThing xs)|] foldThing [] = [t| HNil |] mhlt1 :: [Int] -> Q Exp mhlt1 xss = [| $(foldThing1 xss) |] where foldThing1 (x:xs) = [| x : $(foldThing1 xs)|] foldThing1 [] = [| [] |]