如何在堆栈上更改默认的 GHC 编译器版本



我正在尝试为Haskell设置一个环境,我安装了堆栈。安装后,我意识到GHC 8.6.4版本不是我需要的版本(8.0.2(。

compiler-exe: /home/manny/.stack/programs/x86_64-linux/ghc-tinfo6- 
8.6.4/bin/ghc
compiler-bin: /home/manny/.stack/programs/x86_64-linux/ghc-tinfo6- 
8.6.4/bin
compiler-tools-bin: /home/manny/.stack/compiler-tools/x86_64-linux- 
tinfo6/ghc-8.6.4/bin

所以我安装了 GHC 8.0.2。我知道如果我更改全局配置文件,我可以解决问题,指示我想要的正确编译器,但是进行此类更改以避免编辑配置文件的正确命令是什么?

我试过了:

stack config set --compiler ghc-8.0.2

没有成功。我的编译器仍然是 8.6.4。

~/.stack$ stack ghc -- --version
The Glorious Glasgow Haskell Compilation System, version 8.6.4

谢谢!

你误解了stack config命令。无论您在哪里使用 --compiler ,您都会告诉 Stack 它应该为当前命令使用哪个编译器版本 - 但由于编辑配置不使用任何类型的编译器,这并没有真正改变任何东西。

只要跑stack config set给你

Missing: COMMAND
Usage: stack config set COMMAND [--help]
  Sets a field in the project's stack.yaml to value

这更好地解释了问题。如果您寻求帮助,Stack 会告诉您唯一有效的COMMAND值是 resolversystem-ghcinstall-ghc

因此,您可以将resolver设置为特定的编译器版本,使用

stack config set resolver ghc-8.0.2

但是您无法从命令行设置编译器,因为它不是 stack config set 支持的命令。

我尝试了上面的方法,但未能运行ghci.错误消息如下所示:

Error: [S-6602]
       Stack could not load and parse /root/.stack/global-project/stack.yaml as a YAML configuraton file.
       While loading and parsing, Stack encountered the following error:
       YAML parse exception at line 7, column 18:
       mapping values are not allowed in this context
       For help about the content of Stack's YAML configuration files, see (for the most recent release of Stack)
       http://docs.haskellstack.org/en/stable/yaml_configuration/.

所以这是另一种方法。

如果您的 ghc 版本是 9.2.7,那么其对应的 LTS 版本是 20.18。因此,您只需将文件/root/.stack/global-project/stack.yaml更改为:

# This is the implicit global project's config file, which is only used when
# 'stack' is run outside of a real project.  Settings here do _not_ act as
# defaults for all projects.  To change stack's default settings, edit
# '/root/.stack/config.yaml' instead.
#
# For more information about stack's configuration, see
# http://docs.haskellstack.org/en/stable/yaml_configuration/
packages: []
resolver: lts-20.18

注意不同的 ghc 版本对应不同的 LTS 版本。因此,如果您不使用 ghc-9.2.7,那么您的 LTS 版本肯定不是 20.18。

相关内容

  • 没有找到相关文章

最新更新