我正在尝试为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
值是 resolver
、 system-ghc
和 install-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。