我是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-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在路径中,
答案 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。