如何获取TemplateHaskell命名变量的文本值

如何获取TemplateHaskell命名变量的文本值,haskell,macros,metaprogramming,interpolation,template-haskell,Haskell,Macros,Metaprogramming,Interpolation,Template Haskell,如果我在TemplateHaskell中有一个变量,并且想要找出它所命名的变量的值,前提是该变量被声明为文本,那么可以这样做吗 var = "foo" -- Can `contentsOf` be defined? $((contentsOf . mkName $ "var") >>= guard . (== "foo")) 理论上,是的。实际上,没有 使用reify::Name->Q Info查找有关现有名称的内容,对于这样的定义,您将返回一个VarI值,其中包括一个Maybe

如果我在TemplateHaskell中有一个变量,并且想要找出它所命名的变量的值,前提是该变量被声明为文本,那么可以这样做吗

var = "foo"
-- Can `contentsOf` be defined?
$((contentsOf . mkName $ "var") >>= guard . (== "foo"))

理论上,是的。实际上,没有

使用
reify::Name->Q Info
查找有关现有名称的内容,对于这样的定义,您将返回一个
VarI
值,其中包括一个
Maybe Dec
字段。这似乎表明,在某些情况下,您可能能够获取变量声明的语法树,这将允许您提取文本,但是,对于纯TH解决方案来说,您运气不佳

然而,TH确实允许运行任意IO操作,因此您可以通过自己使用类似的方式加载和解析模块来解决这一问题,不过我怀疑这会带来更多麻烦