如何处理添加新包依赖项的功能请求

Car*_*arl 15 haskell cabal hackage

我是hackage,lrucache包的维护者.我最近收到了为Binary和添加实例的功能请求NFData.这些都是有用的东西,原则上我对这些实例没有任何问题.

但是,它们都引入了新的包依赖关系,我希望尽可能减少我的包的依赖列表.有理智的方法来处理这个问题吗?可能有二十多个不同的包提供了lrucache可以实现的数据结构的有用类型类,并从中获得了一些好处.

显然,将所有这些作为依赖项添加是非启动性的.但还有什么可以做呢?

我可以向lrucache.cabal添加标志,以便编译各种实例.这样做可以使依赖列表最小化,除非您需要它.但它在现实世界中是可怕的,因为你无法在build-depends部分中指定构建标志.因此,您可以依赖具有特定标志的包,但不指定该依赖关系.这很快就会减少到无用的程度.

我可以创建一堆孤立实例包.这样做的好处是可以在build-depends部分中指定对这些实例的依赖性.它的主要缺点是在hackage中添加了大量额外的包,并且需要将它们作为单独的包维护.

我还可以做些什么?什么是正确的做法?

yfe*_*lum 7

如果没有cabal(包装系统)本身的可选依赖系统,那么选项就不太好了.

一种选择如下.您可以为要与主程序包集成的每个附加程序包创建自己的附加程序包.

例如,如果lrucache要集成binary,可以创建一个lrucache-binary包含集成的附加包(在本例中,键入类实例).同样的,你自己的新封装lrucache-nfdata集成lrucachenfdata.

然后,如果有人想要两者兼顾lrucachebinary,他可以[binary, lrucache, lrucache-binary]一起依赖.