首页 > 解决方案 > ghci:模块'main:Main'在多个文件中定义-在新的小堆栈初始化构建ghci包中

问题描述

我尝试stack使用 vscode 设置一个基于 Haskell IDE,并从一个使用创建的小项目开始,stack init然后添加第二个模块src并在package.yaml. 它构建正常,但是当我开始时stack ghci我有警告:

Warning: Multiple files use the same module name:
         * Paths_primo found at the following paths
           * /home/frank/Workspace11/primo/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/autogen/Paths_primo.hs (primo:lib)
           * /home/frank/Workspace11/primo/.stack-work/dist/x86_64-linux-tinfo6/Cabal-3.2.1.0/build/primo-exe/autogen/Paths_primo.hs (primo:exe:primo-exe)
* * * * * * * *

GHCi, version 8.10.4: https://www.haskell.org/ghc/  :? for help
[1 of 3] Compiling Lib              ( /home/frank/Workspace11/primo/src/Lib.hs, interpreted )
[2 of 3] Compiling YamlRead         ( /home/frank/Workspace11/primo/src/YamlRead.hs, interpreted )
[3 of 3] Compiling Main             ( /home/frank/Workspace11/primo/app/Main.hs, interpreted )
Ok, three modules loaded.

似乎autogenPaths_primo(primo是包的名称) 混淆。我究竟做错了什么?

一般问题:经过一些实验后,清理堆栈项目以“重新开始”的正确方法是什么?cabal删除文件和stack-work目录是正确的。stack.yaml和'stack.yaml.lock'有什么关系?

标签: haskellhaskell-stack

解决方案


这似乎是Stack issue #5439中报告的无害警告,其根本原因是hpack issue #303。摆脱警告的解决方法是禁用为可执行文件生成Paths_模块,方法是将以下内容添加到它的部分:primo-exepackage.yaml

when:
- condition: false
  other-modules: Paths_primo

推荐阅读