使用模板haskell获取范围内的所有函数/值

时间:2012-08-02 02:59:24

标签: haskell template-haskell

使用模板haskell,有没有办法列出范围内的所有函数?像

这样的东西
allVarsInScope :: Q [Name]

我正在尝试做的是获取以test_开头的所有导入函数的列表,并自动运行测试。

1 个答案:

答案 0 :(得分:2)

可悲的是,Template Haskell中没有这样的反射功能,但有一些解决方法。但是,在自己编写类似的内容之前,我建议您尝试使用test-framework-th包,该包已经为case_开头的HUnit测试以及以prop_开头的QuickCheck属性执行此操作。

在底层,这个包使用language-haskell-extract包,它基本上在模块上运行自己的解析传递来挑选定义。这是一个有点hacky的解决方案,但它在实践中运作良好。但是,它确实带来了相当多的依赖项,而额外的解析过程可能会降低您的构建速度。