来自最新版本的文档我读过
一个包最多可以有一个未命名的库。
为什么会存在这个限制?这只是一个迟早可以解除的“临时”限制,还是 Haskell 的构建模型或其他东西“必需”的?
从这一限制中,我了解到我的
library
文件中最多可以有一个 .cabal
节,这反过来意味着,如果我想从这个库中获得多个 exposed-modules
,它们必须共享 build-depends
。
如果我想避免多个暴露的模块共享所有它们的依赖项,我有什么选择?
我唯一能想到的是,我可以让每个模块通过自己的包公开。
现在,如果要公开的两个模块的依赖集没有交集(假设模块
A
依赖于模块A2
,而模块B
依赖于模块B2
),那就没问题了,并且我也可以问自己“为什么我首先要把这两个模块放在同一个包中,如果它们彼此无关?只需创建包A
暴露A
,其中A2
是内部库具有自己的依赖关系,...”
但是,如果交集不为空(假设模块
A
取决于 A2
和 C
,模块 B
取决于 B2
和 C
,其中 A2
、B2
、) C
是实现细节),那么,它们共享一些依赖项确实有意义。但是,一旦我制作了 A
和 B
单独的包,那么它们的公共依赖项也必须是(每个单独的或全部一起)一个独立的包。这意味着......我必须发布并公开 3 个或更多包,即使我只想公开两个。
这种情况下推荐的操作方式是什么?