使用模板haskell,有没有办法列出范围内的所有函数?像
这样的东西allVarsInScope :: Q [Name]
我正在尝试做的是获取以test_开头的所有导入函数的列表,并自动运行测试。
答案 0 :(得分:2)
可悲的是,Template Haskell中没有这样的反射功能,但有一些解决方法。但是,在自己编写类似的内容之前,我建议您尝试使用test-framework-th包,该包已经为case_
开头的HUnit测试以及以prop_
开头的QuickCheck属性执行此操作。
在底层,这个包使用language-haskell-extract包,它基本上在模块上运行自己的解析传递来挑选定义。这是一个有点hacky的解决方案,但它在实践中运作良好。但是,它确实带来了相当多的依赖项,而额外的解析过程可能会降低您的构建速度。