(在开始之前:我将使用Cabal来表示名称中包含 Cabal 并且与 Haskell 相关的所有内容。)
前几天又遇到了通常的“你需要更新 X 来安装 Y,但这会破坏依赖 Z”的问题,我想我只想问:为什么 Cabal 不是设计成一个完整的包管理器,尤其是以下特点:
- 版本控制:将一个包的多个版本并排安装,让包选择所需的依赖项。如果未指定软件包版本,请使用可用的最新版本。
- 更新软件包 - 或者更好的是,还安装最新版本。
- 删除包
- 检查包裹完整性
您会看到此列表的去向。现在,对我来说,Cabal 感觉像是一个有点复杂的构建系统(当你想第一次开始使用它时,试着找出你的包需要哪个版本的 Base),它带有一个半生不熟的包安装程序。
那么问题又来了:为什么 Cabal 没有制作一个功能齐全的构建/打包系统?我确信有一些设计决定导致了当前状态。
(这个问题在某种程度上受到Reddit 上的咆哮的启发,但与那个人相反,并不意味着通过上述内容冒犯任何人。):-)