给定一组cabal包,有没有办法自动计算独立包的子集?换句话说,包装的子集足以安装它们。
对于[network,parsec]
,答案为[network]
,因为network
取决于parsec
。
对于[network,containers]
,答案为[network,containers]
,因为:
network
不依赖containers
network
的依赖关系不依赖于containers
containers
不依赖network
containers
的依赖关系不依赖于network
找到2个包的答案并不难。真正有趣的是找出[containers, directory, filepath, lens, xml, http-conduit, regex-posix, monad-control, unordered-containers, glib, hashable, hspec, split, aeson, attoparsec, stm, QuickCheck]
的独立集。
从答案我希望有一些基于cabal库的功能,如∷ [Packages] → IO [Packages]
。
答案 0 :(得分:1)
Cabal正在转向更像NPM的模型,这将使依赖性解决更加简单。每个安装的软件包都会保留其依赖项的本地副本,交换一点磁盘空间,因为安装多个全局软件包时会遇到相互独立的软件包版本控制要求。
在此模型下,安装设置的一组包==
所需的包的子集。虽然一个可能是另一个的依赖关系,但每个安装的副本将保留其自己的依赖关系的本地副本,因此Cabal将不再考虑以这种方式安装的依赖关系。