gpt4 book ai didi

haskell - 将内部模块暴露给 Cabal 中的测试

转载 作者:行者123 更新时间:2023-12-04 08:37:41 24 4
gpt4 key购买 nike

我正在为 open source project 做贡献它在 cabal file 中定义了它的项目设置看起来像这样(省略了许多与此问题无关的属性):

library
hs-source-dirs: src
build-depends:
base >= 4.9 && < 5,
some-other-deps
exposed-modules:
Data.Foo.Bar,
Data.Foo.Baz
other-modules:
Data.Foo.Bar.Internal

test-suite test
hs-source-dirs:
tests
build-depends:
foo-library
other-modules:
Foo.Bar.Tests,
Foo.Baz.Tests

现在,为了测试我添加的功能,我希望测试能够访问 Data.Foo.Bar.Internal 模块,但由于它隐藏在库中,我无法从测试中访问它。

我查看了 cabal docs这建议添加第三个组件 - 一个内部库(不幸的是不可链接,但搜索“内部库”)。如果我正确理解了文档,我应该能够做这样的事情:

library foo-internal
hs-source-dirs: src
build-depends:
base,
some-other-deps
exposed-modules:
Data.Foo.Bar.Internal

library
hs-source-dirs: src
build-depends:
base >= 4.9 && < 5,
foo-internal,
some-other-deps
exposed-modules:
Data.Foo.Bar,
Data.Foo.Baz

test-suite test
hs-source-dirs:
tests
build-depends:
foo-library,
foo-internal
other-modules:
Foo.Bar.Tests,
Foo.Baz.Tests

但是在此处运行 stack build 会给我警告,Data.Foo.Bar.Internal “应该添加到 ./foo 中的暴露模块或其他模块。 cabal”,然后是测试中似乎由统一失败引起的构建错误(它指向库中定义的函数的函数参数,表示其类型必须是 Data.Foo.Bar.Internal .Qux 在包 foo 中定义,并且类型 foo:Data.Foo.Bar.Internal.Qux 不匹配)。

我怎样才能将内部模块暴露给测试套件,而不将它们也暴露给库的使用者?

最佳答案

正如评论中提到的,不同的组件(内部库、可执行文件)应该有不同根下的模块。

关于haskell - 将内部模块暴露给 Cabal 中的测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/64721648/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com