问题描述
我回到了几个星期没做过的项目。这一次我已经重新安装了堆栈。当我通过运行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.hs
与app
一起位于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目录中运行命令,那么一切都会按预期进行。