{-# LANGUAGE TemplateHaskell #-} import Language.Haskell.TH import Language.Haskell.TH.Syntax main :: IO () main = $(do let displayInfo (VarI name _ _) = "variable " <> show name displayInfo (DataConI name _ _) = "data con" <> show name displayInfo _ = "some other name" headInfo <- displayInfo <$> reify (mkName "head") justInfo <- displayInfo <$> reify (mkName "Just") [| do print $(liftString headInfo) print $(liftString justInfo) |] )