Intero:无法为 Lib 加载接口

Intero : Failed to load interface for Lib

我正在尝试为我的 Haskell 项目设置我的 Haskero(Visual Studio 使用 Intero 的代码扩展),但我收到以下错误:

app\Main.hs:3:1: error:
   Failed to load interface for `Lib'
   Use -v to see a list of the files searched for.

重现步骤:

stack new project
cd project
stack build intero
stack exec intero
> :l app/Main.hs

app/Main.hs :

module Main where

import Lib

main :: IO ()
main = someFunc

src/Lib.hs :

module Lib
   ( someFunc
   ) where

someFunc :: IO ()
someFunc = putStrLn "someFunc"

我没有使用 Haskero 的经验,但可以在 Linux 机器上使用普通的旧版 Intero 安装来重现该问题。

问题是您通过 stack exec 而不是 stack ghci 调用 Intero 后端。如果您尝试使用 stack exec ghci 而不是 stack ghci 来调用通常的 GHC 交互会话,您会发现同样的问题(有关更多信息,请参阅 documentation for stack ghci)。

而不是 stack exec intero,尝试:

stack ghci --with-ghc intero --no-build --no-load

它应该可以正常工作。

(请注意,如果您首先 stack build 您的项目,stack exec intero 实际上可以正常工作,但交互式会话仍应通过 stack ghci 调用。)

我在 Visual Studio 代码中遇到了类似的问题。

Haskero 在内部正确使用:

stack ghci --with-ghc intero --no-build --no-load

然而,Haskero 假定堆栈项目是加载到 VSCode 的工作目录。相反,如果堆栈项目是子目录之一,则相同的错误出现在 IDE 中,因为堆栈命令是来自该主目录的 运行。至少目前 Haskero 1.3.1 是这样。

解决方案是始终确保堆栈项目等于 VSCode 中的工作目录。