haskell:在ghc(针对不同的基础)之间切换的有哪些好方法?

时间:2015-09-01 18:49:32

标签: haskell version-control

我是Haskell的初学者,所以我只是想知道在ghc的不同版本之间切换的好方法是什么,这样我们仍然可以cabal install when the dependency of some Hackage requires an older version of base,而不是彻底地进入依赖树像这样搜索:

Resolving dependencies...
cabal: Could not resolve dependencies:
trying: bnfc-system-tests-0.1.0.0 (user goal)
next goal: base (dependency of bnfc-system-tests-0.1.0.0)
rejecting: base-4.8.0.0/installed-901... (conflict: bnfc-system-tests =>
base>=4.5 && <4.8)
rejecting: base-4.8.0.0, 4.7.0.2, 4.7.0.1, 4.7.0.0, 4.6.0.1, 4.6.0.0, 4.5.1.0,
4.5.0.0, 4.4.1.0, 4.4.0.0, 4.3.1.0, 4.3.0.0, 4.2.0.2, 4.2.0.1, 4.2.0.0,
4.1.0.0, 4.0.0.0, 3.0.3.2, 3.0.3.1 (global constraint requires installed
instance)
Dependency tree exhaustively searched.

我正在使用mac,我使用brew(brew install ghc & cabal-install)安装了我的haskell平台(使用ghc-7.10.1.1)。所以我去了旧版本的haskell平台here,在.zshenv

中添加了旧版ghc的别名
ghc-78 --version
The Glorious Glasgow Haskell Compilation System, version 7.8.4

并使用

~/.cabal中创建了一个新的配置文件
-- compiler: ghc-78

但在那之后我跑了

cabal --config-file="./config78" install --only-dependencies --enable-tests

在沙盒目录中,我仍然遇到依赖性问题,表明我仍在使用ghc 7.10。 (所以在那之后我将线路改回编译器:ghc并添加了ghc-location:

-- ghc-location: the/new/directory/ghc 

在程序位置下,我仍然得到同样的东西。)

我做错了什么以及在不同版本的ghc之间切换的好方法是什么? (例如在Node.js中我可以使用n,一个版本控制管理器)

- 更新:

即使在我取消注释行

之后
compiler: ghc-78

cabal --config-file="./config78" install --only-dependencies --enable-tests仍然会给我依赖错误(即使我使用--sandbox-config-file代替)。 cabal sandbox hc-pkg list base将显示base-4.8.0.0,即使我使用配置文件初始化沙箱:

cabal --config-file="./config78" sandbox init

然而,

cabal install -w ghc-7.8.4
只要ghc-7.8.4在路径中,

就可以工作,suggested by Daniel in the comment

3 个答案:

答案 0 :(得分:4)

我建议您使用stack

通过选择一个解析器,您也选择了GHC版本,因此您的代码将使用与Stackage相同的GHC构建。对于GHC 7.8.4,请使用lts-2.17等解析器,或者对GHC 7.10.2等使用lts-3.3

另外,我建议使用:

system-ghc: false

stack.yaml文件中,以便stack始终使用自己的工具链。

答案 1 :(得分:4)

--开头的行被Cabal的配置文件解析器视为注释。所以你应该改变

-- compiler: ghc-78

compiler: ghc-78

答案 2 :(得分:4)

要完成,请在此处添加其他选项:Nix。您可以使用Nix轻松安装和维护不同版本的ghc。 要切换到其他ghc版本,您只需:

nix-shell -p haskell.compiler.ghc7102

或者如果你想要一个7.8.4版本,那么:

nix-shell -p haskell.compiler.ghc784

如果未安装ghc 7.10.2或其他版本,Nix将自动为您下载并安装它们。 (下次您发出此命令时,它显然会重用已安装的组件。)一旦进入nix-shell环境,您就可以导航到您的包目录,并在那里构建您的haskell包。请注意,您可以使用通常的cabal命令或nix-build来构建haskell软件包。

可以获得有关Nix和Haskell的更多信息in this manual