为GHC JavaScript后端配置Haskell Language Server遇报错求助
问题根源
GHCJS版本的GHC二进制文件不支持交互式调用,这正是报错<command line>: not built for interactive use的原因。HLS默认会调用当前环境的GHC来获取版本、分析代码,直接对接GHCJS的GHC就会触发这个错误。
配置方案
你可以通过调整VS Code的HLS设置,强制它使用标准GHC来提供IDE功能,具体操作如下:
覆盖环境变量优先级:打开VS Code设置(快捷键
Ctrl+,/Cmd+,),搜索Haskell: Server Environment,添加PATH变量,把标准GHC所在目录放在GHCJS目录之前。比如GHCup安装的标准GHC路径通常是~/.ghcup/bin(Linux/Mac)或C:\ghcup\bin(Windows),配置示例:"haskell.serverEnvironment": { "PATH": "/home/your-user/.ghcup/bin:/usr/local/bin:/usr/bin" }直接指定标准GHC路径:如果环境变量调整无效,搜索
Haskell: Ghc Path,填入标准GHC的绝对路径,比如~/.ghcup/bin/ghc(Linux/Mac)或C:\ghcup\bin\ghc.exe(Windows)。Cabal项目额外配置:如果用Cabal管理项目,在根目录的
cabal.project中添加以下内容,让HLS只做语法和类型检查,避开GHCJS的编译逻辑:package * ghc-options: -fno-code
验证生效
修改设置后,按Ctrl+Shift+P执行Haskell: Restart Haskell Language Server,重启HLS服务。配置正确的话,HLS就能正常提供代码补全、类型提示等功能,同时你依然可以用GHCJS编译项目。
内容的提问来源于stack exchange,提问作者Newton Migosi

