堆栈找不到它应该能够找到的本地模块

Stack can not find a local module that it should be able to find

我回到了一个几周没做的项目。这次我重新安装了堆栈。当我通过 运行ning ghcid -c 'stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs' 启动 GHCID 时,我收到此错误:

    Could not find module ‘Base’
    Use -v (or `:set -v` in ghci) to see a list of the files searched for.
  |
8 | import qualified Base as B
  | ^^^^^^^^^^^^^^^^^^^^^^^^^^

但奇怪的是,我可以使用 stack run 成功编译和 运行 我的程序。我还可以将 Main.hs 加载到 stack ghci.

Base.hsMain.hs.

位于 app 目录中

这是我的 .cabal 文件,显示我指定了 Base:

executable fishing-web-app-exe
      main-is: Main.hs
      other-modules:
          Paths_fishing_web_app
        , Base
        ...

起初我以为是 GHCID 问题,但我可以直接从命令行 运行ning stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs 重现错误消息。

我也尝试删除 .stack-work 目录并重试,但我遇到了同样的错误。

错误消息说尝试使用 -v 标志来查看搜索的文件。这是我 运行 ghcid -v 'stack exec ....

时的输出
    %ARCH: x86_64
    %VERSION: 0.8.7
    %ARGUMENTS: ["-v","stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs"]
    Loading ghci -fno-code -fno-break-on-exception -fno-break-on-error -v1 -ferror-spans -j "stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs" ...
    %STDOUT: GHCi, version 8.10.2: https://www.haskell.org/ghc/  :? for help
    %STDOUT2: GHCi, version 8.10.2: https://www.haskell.org/ghc/  :? for help
    %STDIN: import qualified System.IO as INTERNAL_GHCID
    %STDIN: :unset +t +s
    %STDIN: :set prompt #~GHCID-START~#
    %STDIN: :set prompt-cont #~GHCID-START~#
    %STDIN: :set -fno-break-on-exception
    %STDIN: :set -fno-break-on-error
    %STDIN: :set -v1
    %STDIN: :set -fno-hide-source-paths
    %STDIN: 
    INTERNAL_GHCID.putStrLn ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','1','~','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','1','~','#']
    GHCi, version 8.10.2: https://www.haskell.org/ghc/  :? for help
    %STDERR: 
    %STDOUT2: 
    ​
    %STDERR: <no location info>: error:
    %STDOUT2: <no location info>: error:
    <no location info>: error:
    %STDOUT: Failed, no modules loaded.
    %STDERR:     can't find file: stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs
    %STDOUT2: Failed, no modules loaded.
    %STDOUT2:     can't find file: stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs
    Failed, no modules loaded.
        can't find file: stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs
    %STDOUT: Prelude> Prelude> Prelude INTERNAL_GHCID> Prelude INTERNAL_GHCID> #~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-FINISH-1~#
    %STDERR: #~GHCID-FINISH-1~#
    %STDIN: :show modules
    %STDIN: 
    INTERNAL_GHCID.putStrLn ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','2','~','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','2','~','#']
    %STDOUT: #~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-FINISH-2~#
    %STDERR: #~GHCID-FINISH-2~#
    %STDIN: 
    %STDIN: 
    INTERNAL_GHCID.putStrLn ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','3','~','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','3','~','#']
    %STDOUT: #~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-FINISH-3~#
    %STDERR: #~GHCID-FINISH-3~#
    %STDIN: :set -ferror-spans
    :set -j
    :set -fdiagnostics-color=always
    ​
    %STDIN: 
    INTERNAL_GHCID.putStrLn ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','4','~','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','4','~','#']
    %STDOUT: #~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-FINISH-4~#
    %STDERR: #~GHCID-FINISH-4~#
    %STDIN: :show paths
    %STDIN: 
    INTERNAL_GHCID.putStrLn ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','5','~','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','~','G','H','C','I','D','-','F','I','N','I','S','H','-','5','~','#']
    %STDOUT: #~GHCID-START~##~GHCID-START~#current working directory: 
    %STDOUT:   /home/nick
    %STDOUT: module import search paths:
    %STDOUT:   .
    %STDOUT: #~GHCID-START~##~GHCID-START~##~GHCID-FINISH-5~#
    %STDERR: #~GHCID-FINISH-5~#
    %MESSAGES: [Message {loadSeverity = Error, loadFile = "/home/nick/<unknown>", loadFilePos = (0,0), loadFilePosEnd = (0,0), loadMessage = ["<no location info>: error:","    can't find file: stack exec -- ghci -isrc -iapp ~/haskell/fishing-web-app/app/Main.hs"]}]
    %LOADED: ["/home/nick/<unknown>"]
    ]0;1 error - nick%WAITING: /home/nick/.ghcid /home/nick/<unknown>
    %WAITING: /home/nick

我的栈版本是2.5.1

问题是我没有从项目目录中 运行 宁 stack exec 命令。如果我 运行 来自 app 目录的命令,那么一切都会按预期工作。