【发布时间】:2016-05-19 21:14:59
【问题描述】:
我正在编写一个模板 haskell 拼接,并且正在努力生成正确的 Names。如果我想生成一个已知名称(例如,函数f),我可以使用'f。这要求 f 在我定义接头的范围内,而不是在使用它的范围内,这正是我想要的。
现在我想要同样的东西,但需要一个动态名称。例如,假设我的拼接采用n :: Int 作为参数。我想将"f" ++ show n生成为Name,查看了拼接定义站点,而不是使用站点。
我尝试了几个选项:mkName 和 lookupValueName 都要求名称在使用站点的范围内。单引号语法需要一个文字名称,而不是动态名称。
最后我开始尝试mkNameG。由于这些函数与我使用它们来自同一个包,因此我从包名开始,但这给出了错误Can't find interface-file declaration for variable the-package-name:Some.Module.f0。在阅读了一些源代码后,我发现了使用包名"main" 的地方。这似乎在 GHCi 中有效,但是在编译时我仍然遇到同样的错误。
有没有办法做到这一点?我当然可以列举所有选项,但我想避免这种情况,因为这个练习的重点是让代码更加动态。
【问题讨论】: