独立子集的套餐包集

给定一套cabal包,有没有办法自动计算独立包的子集? 换句话说,包的子集将足以安装它们全部。

对于[network,parsec]答案是[network]因为它的network依赖于parsec

对于[network,containers] ,答案是[network,containers]因为:

  • network不依赖于containers
  • 所有network的依赖不依赖containers
  • containers不依赖于network
  • 所有containers的依赖不依赖于network

find2个包装的答案并不难。 真正有趣的是find独立的集[containers, directory, filepath, lens, xml, http-conduit, regex-posix, monad-control, unordered-containers, glib, hashable, hspec, split, aeson, attoparsec, stm, QuickCheck]


从答案我期望一些function的基础上, ∷ [Packages] → IO [Packages]

Cabal正在转向更类似于NPM的模型,这将使​​依赖parsing变得简单得多。 每个已安装的软件包都会保留其依赖项的本地副本,交换一点磁盘空间,以便安装具有相互独立的软件包版本控制要求的多个全局软件包。

在这个模型下,需要安装一组包==的包的子集。 虽然一个可能是另一个的依赖关系,但是每个安装的副本都会保留它自己的本地依赖副本,所以Cabal不会再考虑这种依赖方式。