一个包中只能公开一个库,是否有根本原因?

问题描述 投票:0回答:1

来自最新版本的文档我读过

一个包最多可以有一个未命名的库。

为什么会存在这个限制?这只是一个迟早可以解除的“临时”限制,还是 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 个或更多包,即使我只想公开两个。


这种情况下推荐的操作方式是什么?

haskell module dependencies libraries cabal
1个回答
0
投票

答案是这里,我只是在看文档的一些旧版本。

这是新人要说的

在 Cabal 规范 3.0 版本之前,所有子库都是内部库。在 2.0 版本之前,包不能包含子库。

© www.soinside.com 2019 - 2024. All rights reserved.