cabal 与 stack Link to heading

stack没有什么好多写的, 这就是一个自管理数据库的泥沙盒。和一般的虚拟环境不太一样的是,由一个用户管理其所有的全部环境,所以不会存在同一软件多次被安装而占用空间的问题,同时也可以使得多个工具可以共存。但是这个工具有一个问题,就是不太好清理,想清理得自己进目录下面来一删。而且删除时,也会影响到依赖数据库。

cabal是haskell本身所提供的,但这并不是一个传统意义上的包管理,准确来说,这不是一个管理工具,~~只是一个安装工具!~~只是一个构建工具,构建内包含了安装依赖的过程。是的,它只提供了install。想删除,也得自己进目录去删。同时update只是针对list,而不是packages。如果在全局安装的话,update后要人工进行一次reinstall。

haskell软件发布应该像c家庭那样,由专门的包管理工具或者自行编译安装。不论是cabal还是stack,都不是以管理包为目的,其是以开发构建为目的设计的,不可以弄错根本。所以不论二者那个,都不建议在全局安装库包。对于执行工具而言,开发工具直接使用stack会比较好。比如intero或ghc-mod。因为stack是全局管理唯一,再配合插件使用会相对优秀。自动初始化。

但对于hoogle一类工具而言,使用cabal安装会比较好。配合全局ghc进行使用。或者针对项目进行一次install

而cabal虽然也能使用sandbox,但这样一来得手动处理PATH目录,stack会自动将文件放至~/.local/bin中,当然这样带来的另外问题就是我们得需要安需install一次(但其实配合开发插件,一般这个过程会自动完成)。