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

问题描述

我回到了几个星期没做过的项目。这一次我已经重新安装了堆栈。当我通过运行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.hsapp一起位于Main.hs目录中。

这来自我的.cabal文件,表明我已指定Base:

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

起初,我认为问题出在GHCID,但我可以通过直接从命令行运行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','N','S','1','#']
    INTERNAL_GHCID.hPutStrLn INTERNAL_GHCID.stderr ['#','#']
    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 ['#','2','#']
    %sTDOUT: #~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-START~##~GHCID-FINISH-2~#
    %sTDERR: #~GHCID-FINISH-2~#
    %sTDIN: 
    %sTDIN: 
    INTERNAL_GHCID.putStrLn ['#','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 ['#','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 ['#','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,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目录中运行命令,那么一切都会按预期进行。