2012-08-02 112 views
4

使用模板haskell,有没有办法列出范围内的所有函数?类似于使用模板haskell获取范围内的所有函数/值

allVarsInScope :: Q [Name] 

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

+0

[Test.QuickCheck.All](http://hackage.haskell.org/packages/archive/QuickCheck/2.4.1.1/doc/html/Test-QuickCheck-All.html)如果您的测试是QuickCheck属性。 – 2012-08-02 07:12:29

+0

它不跨越模块边界。 – 2012-08-02 11:24:02

+0

用于自动测试运行[见HTF项目](http://hackage.haskell.org/package/HTF)。它确实相当惊人。 – 2013-10-30 18:52:11

回答

2

不幸的是,在模板Haskell中没有这样的反射能力,但有一些解决方法。然而,在自己写这样的东西之前,我建议尝试使用test-framework-th软件包,它已经用于从case_开始的HUnit测试以及以prop_开头的QuickCheck属性。

这个包使用了language-haskell-extract包,它基本上在模块上运行它自己的解析过程来挑选出定义。这是一个有点冒失的解决方案,但它在实践中效果不错。但是,它确实带来了相当数量的依赖关系,额外的解析过程可能会降低构建速度。

+0

如果我可以帮助它,我宁愿不在构建时使用测试重新解析每个模块。 – 2012-08-02 11:24:28