如何在我的 cabal 包中指定 "internal" 个模块
How can I designate "internal" modules in my cabal package
我正在使用 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*
模块公开的接口。
有什么方法可以制作一个 "private" 库(或多个,以最大限度地减少依赖过度包含),我可以在我的包中使用它,但可以跨可执行文件和测试套件使用?
containers
中使用的一种方法是使用 CPP 有条件地公开一些绑定,具体取决于是否正在 运行。
在大多数情况下,正确的做法是公开您的内部模块,名称类似于Blah.Blah.Internal
,这样您的用户就可以在背后玩游戏,同时郑重地(但含蓄地)警告他们,他们最好小心,他们不能依赖其中的任何内容,在不同版本之间保持相同。
我正在使用 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*
模块公开的接口。
有什么方法可以制作一个 "private" 库(或多个,以最大限度地减少依赖过度包含),我可以在我的包中使用它,但可以跨可执行文件和测试套件使用?
containers
中使用的一种方法是使用 CPP 有条件地公开一些绑定,具体取决于是否正在 运行。
在大多数情况下,正确的做法是公开您的内部模块,名称类似于Blah.Blah.Internal
,这样您的用户就可以在背后玩游戏,同时郑重地(但含蓄地)警告他们,他们最好小心,他们不能依赖其中的任何内容,在不同版本之间保持相同。