我正在使用cabal来帮助组织我的依赖项,构建进程以及测试我正在进行的小型Haskell项目。当前的cabal文件包含以下行:
library
hs-source-dirs: src
exposed-modules: Project.Exposed1
, Project.Exposed2
-- pretty please don't use below modules
, TestingUtilityFunctions
, GenericUtilityFunctions
other-modules: Convenient submodule for responsibility separation
, Another one
executable E1
-- relies on Project for both Project.Exposed1 AND GenericUtilityFunctions
testsuite T2
-- relies on Project for both Project.Exposed2 AND TestingUtilityFunctions
我需要公开TestingUtilityFunctions
和GenericUtilityFunctions
,因为它们会显示在E1
和T2
中。但是,它们不应该出现在库中,因为库的功能不是提供通用实用程序功能(我根据需要更改),而是提供Project.Exposed*
模块公开的接口。
有没有办法建立一个“私有”库(或几个,以最小化依赖性过度包含),我可以在我的包中使用,但跨越可执行文件和测试套件?
答案 0 :(得分:10)
containers
中使用的一种方法是使用CPP有条件地公开某些绑定,具体取决于是否正在运行测试版本。
在大多数情况下,正确的做法是公开您的内部模块,其名称为Blah.Blah.Internal
,让您的用户可以在庄严地(但含蓄地)背后玩游戏警告他们他们最好小心,并且他们不能依赖从版本到版本保持相同的任何东西。