【发布时间】:2011-09-15 20:15:01
【问题描述】:
我是一个关于 hackage 的包的维护者,lrucache。我最近收到了一个为Binary 和NFData 添加实例的功能请求。这两个都是有用的东西,原则上我对这些实例没有问题。
但是,它们都引入了新的包依赖项,我希望尽可能减少包的依赖项列表。有没有理智的方法来处理这个?可能有超过 20 个不同的包提供了有用的类型类,lrucache 中的数据结构可以实现这些类并从中受益。
显然,将它们全部添加为依赖项是行不通的。但是还能做什么呢?
我可以向 lrucache.cabal 添加标志,以便编译各种实例。就使依赖项列表最小化而言,这很有效,除非您需要它。但这在现实世界中很可怕,因为您不能在 build-depends 部分中指定构建标志。因此,您可以依赖具有特定标志的包,但不指定该依赖项。这很快就会变得几乎无用。
我可以创建一堆孤立的实例包。这样做的好处是允许在 build-depends 部分中指定对这些实例的依赖关系。它的主要缺点是在 hackage 中添加了大量额外的包,并且需要将它们作为单独的包进行维护。
我还能做什么?什么是正确的做法?
【问题讨论】:
-
“孤立实例包”方法似乎是一种常见的策略,至少。正确的做法可能是发明更好的依赖管理,但是......
-
@C. A. McCann,我个人不喜欢软件使用
./configure --enable-Z。我喜欢简单的东西——标记为已安装的包意味着它已安装,而不是“它安装了选项 X 和 Y 但不是 Z”。也许 Hackage 可以更好地组织孤立实例包,但我不认为它们在概念上是非法的。 -
@gatoatigrado:我同意。正如我提到的,Cabal 更好地组织它们也可以称为“更好的依赖管理”,所以请随意发明它。 :] 我不确定实施这样的系统会遇到什么障碍。
-
nfdata可以在主包中拥有实例——它已经依赖于许多核心包。binary曾经是唯一的序列化包,但现在有一些竞争对手。为此,一个单独的包可能没问题,但如果序列化代码足够简单,您可以在 docs/wiki 页面中提供它,并让用户在必要时编写自己的实例或序列化代码。