我正在尝试构建一个使用Euterpea的项目。
正在运行contains(item)
我收到以下错误消息,建议我需要将stack build
添加到Euterpea
文件的build-depends
部分。
.cabal
我在那里添加$ sb
composition-0.1.0.0: build (lib + exe)
Preprocessing library composition-0.1.0.0...
[2 of 2] Compiling Lib ( src/Lib.hs, .stack-work/dist/x86_64-linux-nix/Cabal-1.24.2.0/build/Lib.o )
/home/matthew/backup/composition/composition/src/Lib.hs:5:1: error:
Failed to load interface for ‘Euterpea’
It is a member of the hidden package ‘Euterpea-2.0.4’.
Perhaps you need to add ‘Euterpea’ to the build-depends in your .cabal file.
Use -v to see a list of the files searched for.
-- While building package composition-0.1.0.0 using:
/home/matthew/.stack/setup-exe-cache/x86_64-linux-nix/Cabal-simple_mPHDZzAJ_1.24.2.0_ghc-8.0.2 --builddir=.stack-work/dist/x86_64-linux-nix/Cabal-1.24.2.0 build lib:composition exe:composition-exe --ghc-options " -ddump-hi -ddump-to-file"
Process exited with code: ExitFailure 1
,然后Euterpea
文件的library
部分如下。
.cabal
然而,当我再次运行library
hs-source-dirs:
src
build-depends: base >= 4.7 && < 5
, Euterpea
exposed-modules:
Lib
other-modules:
Paths_composition
default-language: Haskell2010
时,它会出现同样的错误 - 并将我的stack build
文件更改回原来的状态,然后.cabal
部分看起来像
library
为什么library
hs-source-dirs:
src
build-depends:
base >= 4.7 && < 5
exposed-modules:
Lib
other-modules:
Paths_composition
default-language: Haskell2010
会改变我的stack build
文件?我以前从未见过这种情况。
旁注:
不确定它是否相关,但cabal
文件的格式似乎与通常不同。与以前的项目一样,我通过运行.cabal
自动初始化。我不知道我可能做的与以前的项目有什么不同,导致stack new <project-name>
的这种意外行为。
答案 0 :(得分:7)
确保项目目录的根目录中存在package.yaml
。
package.yaml
是一种新的文件格式,用于改进由hpack转换的cabal语法。
Stack支持hpack,因为stack build
命令会自动将package.yaml转换为带有hpack
命令的cabal文件。
因此,请删除package.yaml
或修改package.yaml
以添加Euterpea包。
编辑它并不困难,因为它的格式是YAML。
答案 1 :(得分:1)
我想补充 YAMAMOTO Yuji's 的答案。解决方案是绝对正确的。但我只想添加一些东西,编辑 package.yaml
并不难。
第 1 步:最棘手的部分是找到正确的包名称。
<块引用>使用 Hoogle 或 Stackage 查找模块所在的包 居住。详细了解如何在此 post 中查找包名称。
第 2 步:现在您必须打开 package.yaml 文件并添加包名称。在您的情况下,在依赖项列表中添加 'Euterpea' 包。
dependencies:
...
- your-package-name
<块引用>
请注意,Euterpea 包必须以不同的方式添加。请阅读this post以获得更好的理解。
第 3 步:在项目根目录中打开 project-name.cabal
并在 build-depends
下添加所需的包名称:
library
hs-source-dirs:
src
build-depends:
base >= 4.7 && < 5
, your-package-name
exposed-modules:
Lib
第 4 步:发出 stack build
以下载和构建依赖项
(或 stack ghci
,如果您打算在 REPL 中使用它)
希望这有效!快乐编码! :)