首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用TemplateHaskell列出名称空间中的所有名称

问使用TemplateHaskell列出名称空间中的所有名称
EN

Stack Overflow用户
提问于 2014-10-16 08:08:20
回答 1查看 1K关注 0票数 72

我想要一个TemplateHaskell函数variablesInScope :: Q [Name],它返回作用域中所有变量的Name列表。TemplateHaskell显然有这个信息,以便实现像reify :: Name -> Q Info和lookupValueName :: String -> Q (Maybe Name)这样的函数。

我想要的函数是否存在于某个地方,而我只是忽略了它?或者它可以以某种方式轻松构建?

EN

回答 1

Stack Overflow用户

发布于 2016-07-27 02:15:21

不幸的是,仅使用TH 是无法做到这一点的。尝试将Haskell模块解析为haskell-src-meta TH AST**.**的

不过,它将需要Q monad的IO功能来加载模块。

请参考以查看当前的粗略规格

(1)将Module ModuleInfo (从ModuleInfo reifyModule获取)扩展到​模块,其中​仍然是导入列表,Name包含模块的导出名称列表。

(2)添加生成当前​模块的thisModule ::q模块。

(3)添加topLevelNames ::q名称,生成绑定在当前模块中的顶级名称(导出和非导出)的列表,该列表将对reify可见。

(4)添加nestedNames ::q Name,生成在此上下文中可见的非顶级(嵌套)名称的列表。

(5)添加parentNames ::q Name,生成与当前拼接上下文直接关联的名称列表。例如,foo,bar ::$(typeSplice)将看到foo,bar,foo = $(exprSplice)将看到foo,$(topLevelDecSplice)将看到[]。

(6)可选添加isTopLevel ::Name -> q Bool,检测名称是否绑定在(当前模块?)的顶层。类似这样的事情也可以通过搜索topLevelNames.来完成

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26394199

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档