haskell 如何更改Stack上的默认GHC编译器版本

t2a7ltrp  于 2023-04-21  发布在  其他
关注(0)|答案(2)|浏览(191)

我试图为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

谢谢大家!

m1m5dgzv

m1m5dgzv1#

你误解了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不支持该命令。

2exbekwf

2exbekwf2#

我尝试了上面的方法,但是运行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。

相关问题