在哪里准确地设置要导入的模块的依赖项,使用 "The Haskell Tool Stack" ?



背景

文件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

相关内容

  • 没有找到相关文章