背景
文件package.yaml中有多个位置用于设置依赖关系。
name: Test1
...
extra-source-files:
- README.md
- ChangeLog.md
...
dependencies:
- base >= 4.7 && < 5
library:
source-dirs: src
executables:
Test1-exe:
main: Main.hs
source-dirs: app
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- Test1
- directory
tests:
Test1-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- Test1
进一步的背景
在我创建的Haskell模块中;目录";像这样。。。
import qualified System.Directory as Dir
并像这样使用它。。。
Dir.removeFile
我说这个包裹";目录是通过执行安装的。。。
stack install directory
当构建应用程序("Main.hs")加库(./src)时;说"。。。
[ 7 of 10] Compiling XYZ
srcXYZ.hs:16:1: error:
Could not load module `System.Directory'
It is a member of the hidden package `directory-1.3.6.0'.
Perhaps you need to add `directory' to the build-depends in your .cabal file.
Use -v (or `:set -v` in ghci) to see a list of the files searched for.
|
16 | import qualified System.Directory as Dir
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
根据我在stackoverflow、谷歌和这里搜索后读到的内容;https://docs.haskellstack.org/en/stable/README/",并且为了包括包装"1";目录";我操纵了";stack.yaml";以及";包装.yaml"-但它不起作用,我也找不到解释poperly如何起作用的资源。
实际问题
依赖关系有不同的部分和列出的方式。
我读了这篇文章,但没有用。
在哪里准确地设置要导入的模块的依赖关系?
备注
一个类似的问题("外部依赖,Haskell,stack:我应该修改一些东西还是‘导入’就足够了?")几乎回答了我的问题。
虽然我仍然得到了否决票,但我不能删除这个问题,因为我已经得到了答案,这就是为什么我试图提供一个更准确的问题,并希望能够提供一个准确的答案。
另请参阅我的第二条评论,以及下面新编辑的答案。
错误消息的相关部分如下:
也许您需要将
directory
添加到.cab文件中的构建依赖项中。
如果要执行此操作:在package.yaml
中,将- directory
添加到第一个dependencies:
字段中。
name: xyz
version: 0.1.0.0
github: "githubuser/xyz"
license: none
author: "..."
maintainer: "...@..."
copyright: "(c) 2021 ..."
extra-source-files:
- README.md
- ChangeLog.md
# ...
description: Please see the README on GitHub at <https://github.com/...>
dependencies:
- base >= 4.7 && < 5
- directory
library:
source-dirs: src
ghc-options:
- -O2
- -threaded
- -rtsopts
- -with-rtsopts=-N
executables:
xyz:
main: Main.hs
source-dirs: app
ghc-options:
- -O2
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- xyz
tests:
xyz-test:
main: Spec.hs
source-dirs: test
ghc-options:
- -threaded
- -rtsopts
- -with-rtsopts=-N
dependencies:
- xyz
注:仅在executables:
下方添加- directory
是不够的。
允许对- directory
进行缩进,但所有依赖项都必须具有相同的缩进。因此,以下内容也可以:
dependencies:
- base >= 4.7 && < 5
- directory
进一步说明
许多人不使用hpack
(他们删除package.yaml
并直接编辑.cabal
文件),这就是为什么如果您使用hpack
,您可能会发现很多文档都不适用。
在您的案例中,.cabal
文件是从package.yaml
生成的。这是使用hpack
工具完成的,该工具在stack
中默认使用。
它翻译成xyz.cab文件,如下所示:
library
exposed-modules:
...
other-modules:
Paths_xyz
hs-source-dirs:
src
ghc-options: -O2 -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, directory
default-language: Haskell2010
executable xyz
main-is: Main.hs
other-modules:
Paths_genc3
hs-source-dirs:
app
ghc-options: -O2 -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, directory
, xyz
default-language: Haskell2010
test-suite xyz-test
type: exitcode-stdio-1.0
main-is: Spec.hs
other-modules:
Paths_genc3
hs-source-dirs:
test
ghc-options: -threaded -rtsopts -with-rtsopts=-N
build-depends:
base >=4.7 && <5
, directory
, xyz
default-language: Haskell2010