haskell:在ghc(针对不同的基础)之间切换的好方法是什么?

吖奇说*_*HUō 6 version-control haskell

我是Haskell的初学者所以我只是想知道在ghc的不同版本之间切换的好方法是什么,以便我们仍然可以cabal install 在某些Hackage的依赖需要较旧版本的base时,而不是运行到Dependency树中详尽搜索像这样:

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.
Run Code Online (Sandbox Code Playgroud)

我正在使用mac,我使用brew(brew install ghc & cabal-install)安装了我的haskell平台(使用ghc-7.10.1.1 ).于是我就抓住哈斯克尔平台的旧版本在这里,添加了对旧版本GHC的别名我.zshenv

ghc-78 --version
The Glorious Glasgow Haskell Compilation System, version 7.8.4
Run Code Online (Sandbox Code Playgroud)

并提出了新的配置文件中~/.cabal

-- compiler: ghc-78
Run Code Online (Sandbox Code Playgroud)

但那之后我跑了

cabal --config-file="./config78" install --only-dependencies --enable-tests
Run Code Online (Sandbox Code Playgroud)

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

-- ghc-location: the/new/directory/ghc 
Run Code Online (Sandbox Code Playgroud)

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

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


--update:

即使我已经取消注释该行

compiler: ghc-78
Run Code Online (Sandbox Code Playgroud)

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
Run Code Online (Sandbox Code Playgroud)

然而,

cabal install -w ghc-7.8.4
Run Code Online (Sandbox Code Playgroud)

只要ghc-7.8.4在路径中,就像Daniel在评论中建议的那样工作.

Eri*_*ikR 5

我建议stack为此使用:

通过选择解析器,您还选择了GHC版本,因此您的代码将使用与Stackage相同的GHC构建。使用类似lts-2.17GHC 7.8.4或lts-3.3GHC 7.10.2等的旋转变压器。

另外,我建议使用:

system-ghc: false
Run Code Online (Sandbox Code Playgroud)

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