你好,我在cabal文件中有以下模块:
library task1-lib
exposed-modules:
Interpreter,
Parser
build-depends:
base ^>=4.14.3.0,
containers,
mtl,
parsec
ghc-options: -Wall -Werror -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -Wno-unused-top-binds -Wno-orphans -Wno-type-defaults
hs-source-dirs:
task1/lib
default-language: Haskell2010
executable task1
main-is: Main.hs
ghc-options: -Wall -Werror -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -Wno-unused-top-binds -Wno-orphans -Wno-type-defaults
build-depends:
base ^>=4.14.3.0
hs-source-dirs: task1
default-language: Haskell2010
当我执行以下操作时:
cabal repl
...
GHCi, version 8.10.7: https://www.haskell.org/ghc/ :? for help
[1 of 2] Compiling Interpreter ( task1/lib/Interpreter.hs, interpreted )
[2 of 2] Compiling Parser ( task1/lib/Parser.hs, interpreted )
Ok, two modules loaded.
> :l Parser
我收到了以下错误信息:
<no location info>: error: [-Wmissing-home-modules, -Werror=missing-home-modules]
These modules are needed for compilation but not listed in your .cabal file's other-modules:
Interpreter
问题
当我想要加载一个单独的文件来尝试其中模块的函数时,该怎么做?
当我尝试运行cabal repl task1-lib
命令时,出现了同样的情况。
编辑:
有一种可能的解决方法是通过在-Werror
之后添加-Wwarn=missing-home-modules
的方式修改cabal。这仍然将-Werror
应用于所有警告,而不是将missing-home-modules
错误保留为警告,并使得可以在repl中使用:load加载模块。
library task1-lib
exposed-modules:
Interpreter,
Parser
build-depends:
base ^>=4.14.3.0,
containers,
mtl,
parsec
ghc-options: -Wall -Werror -Wwarn=missing-home-modules -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -Wno-unused-top-binds -Wno-orphans -Wno-type-defaults
hs-source-dirs:
task1/lib
default-language: Haskell2010
executable task1
main-is: Main.hs
ghc-options: -Wall -Werror -Wcompat -Widentities -Wincomplete-uni-patterns -Wincomplete-record-updates -Wno-unused-top-binds -Wno-orphans -Wno-type-defaults
build-depends:
base ^>=4.14.3.0
hs-source-dirs: task1
default-language: Haskell2010
Interpreter
没有列在other-modules
部分中 - 你尝试过添加它吗?如果那也不起作用,那我就不知道问题出在哪里了。你可以暂时移除导出声明,让所有东西都被导出。 - Vikstapolis-Werror
标志,这将把它提升为错误。因此,您可以删除该标志。另外,我发现这个——警告似乎是一个可以忽略的错误。 - Vikstapolis-Werror
。不过我在这个仓库https://github.com/jyp/dante/issues/60中找到了这个问题,并且有一个解决方法可以使用`-Wwarn=missing-home-modules`,这样只会将`missing-home-modules`作为警告,其他警告仍然是错误。所以我认为这是正确的可能解决方法。 - xbalaj