由于Name
有Show
个实例,并且字符串可用于生成相应的Name
,因此我考虑使用以下方法:
\ name -> [e| mkName $(lift (show name)) |]
这在ghci中运行良好。但在编译代码中,实际编译的变量看起来像p_a4hEk
,而Show
生成的字符串看起来像p_6989586621680030942
。
这里发生了什么?有没有办法将Name
提升为模板Haskell ExpQ
?
用例:我正在编写一个TH API,它可以基于人类可读的用户描述构建复杂而高效的Haskell函数。我将返回的函数附加到一个文档中,该文档以人类可读的术语解释每个参数的用途和类型。如果文档还可以包含代码中用于该参数的名称,那将是很好的,这样用户可以根据需要查看拼接代码并识别哪个参数是哪个。