为何Cabal测试强制使用Main模块?Tests.hs无法识别问题解析
Cabal测试套件为何要求Main模块作为入口?
- Cabal的测试套件本质是可执行程序,它依赖GHC编译生成可执行文件,而GHC对可执行程序有硬性规则:必须包含
Main模块,且该模块里要有main函数作为程序入口。 - 当你在
.cabal中指定main-is: Tests.hs时,Cabal会通知GHC将这个文件编译为可执行测试程序。此时GHC会默认查找文件中的Main模块,若你的文件声明的是module Tests where,GHC找不到要求的Main模块,就会报错无法生成输出。 - 如果你不想直接用
Main作为测试文件的模块名,也可以通过拆分结构实现:在.cabal的测试套件部分添加other-modules: Tests,再单独创建一个Main.hs,在其中导入Tests模块并调用测试的main函数(比如main = Tests.main),不过这种方式不如直接将测试文件设为Main模块简便。
内容的提问来源于stack exchange,提问作者F. Zer
相关产品推荐
相关产品推荐

